blog/2008-07-29
getElementsByClassをDojoで
DojoでgetElementsByClassを使う場合は、dojo.queryを使うらしい。たとえば、ClassがActionのボタンを関数に入れる場合は、
dojo.query('button.Action');
だけである。また、これがクリックされたときの処理を加える場合は、
dojo.query('button.Action').connect('onClick',function(){ …
で<button class="Action">のタグすべてのクリック時の処理がいきわたる。しかしながら、ボタンによって処理を変えたい場合もあるだろう。そこで、
dojo.query('button.Action').connect('onClick',function(elem){ console.log(elem.target); …
と記述する。このelemにはクリックしたボタンの要素が記入される。実際使う場合は、elem,targetという形になるだろう。たとえば、
<button class="Action" id="submit">Submit</button> <button class="Action" id="cancel">Cancel</button>
の場合で、id属性で処理を分けたい場合は、
dojo.query('button.Action').connect('onClick',function(elem){ this.id = elem.target.id.replace("_text", "")); // dojo.form.Buttonの場合。 switch(this.id){ case 'submit': … break; case 'cancel': … break;
というようになる。つまり、普通にイベントリスナを入れる際のthisは、ここでは、elem.targetと等価といったところだろうか。注意したいのは、id属性に_textが追加されるところである。つまり、
<button dojoType="dijit.form.Button" class="Action" id="cancel">Cancel</button>
の場合、elem.target.id="cancel"ではアクセスできないことになる。なぜか、elem.target.idでは、cancel_textとなってしまう。そこで、elem.target.id.replace("_text", ""));を追加し、_textを削除する。
これで、通常のイベントリスナと同じように使うことができるようになる。
Last Modified: 2008-07-29 16:13:31