MW211 EXIT

devlog
jQuery/イベントの後付け
2012年11月16日
クリックイベントとかを定義しても、最初のその時点でその要素がないと
その(まだ出現していない)要素にはイベントが反映されない。

つまりは、appendとかでボタンを追加しても、
そいつにはイベントが登録されていないわけだ。

だいたい、ボタンを出現させるってことは、そいつを押させて何かのイベントを
起こさせたりしたわけだから、ボタンの出現とともにイベントも登録したいわけだ。
#最初に全部出現させといて、必要なもの以外隠すという手もあるが、
  全部がいくつかわからない時にはちょっと難ありだ。

で、とにかくappend後、再度イベントを登録しちゃえばいいじゃん、ということで、
append処理を行った直後にイベント処理を追記した。
┌──────────────────────────────────────┐
│$('#body')                                                                  │
│    .append($('<input>').prop('type' , 'button')                            │
│                        .val('押して')                                      │
│    );                                                                      │
├──────────────────────────────────────┤
│$(':button').click(function() {                                             │
│    alert("押したね?");                                                    │
│});                                                                         │
└──────────────────────────────────────┘
おぉ、これならいける…と思ったのだが、なんとボタンが出現する度に
イベントが多重登録されていくのであった。

で、調べたら、bindっての使えばいいらしい。
┌──────────────────────────────────────┐
│$('#body')                                                                  │
│    .append($('<input>').prop('type' , 'button')                            │
│                        .val('押して')                                      │
│                        .bind("click", function() {                         │
│                            alert("押したね?");                            │
│                        })                                                  │
│    );                                                                      │
└──────────────────────────────────────┘
分類:jQuery