注: .on()
&.off()
は、執筆時点 (2014 年 8 月) の最新の jQuery 構文です。
jQuery 1.7 以降を使用する場合、メソッド.bind()
、 .delegate()
、およびは使用しない.live()
でください。同じことが、、 &にも当てはまります。.unbind()
.undelegate()
.die()
序章:
jQuery の.on('click')
vs.click()
と同様に、 .on('submit')
vsを使用.submit()
すると多くの利点が追加されます。
andreister からの.on('click')
vs.click()
の回答で、彼はメモリ使用量が少ないことを指摘しています。vs についても同じことが予想され.on('submit')
ます.submit()
。
.on('submit')
しかし、 vsのはるかに重要な利点.submit()
は、ある種の「プログラム上の利便性」です。
- 動的に追加された要素の操作
- 名前空間とreisterも言及しました(彼の回答のコメントで指摘しました)
以下の使用例を参照して、これがどのように機能するかを確認してください。
動的に追加された要素の操作: 使用例 1
jsbin.com/puqahunovido/1/edit?html,js,consoleでライブ デモを参照してください (右上の [Run/Clear] をクリック) 。
基本的に、要素にその子 (直接またはそうでない) が送信されているかどうかを「監視」するように jQuery に指示できます。これは、この要素に新しいフォームを動的に追加する場合に特に便利です。その後、これらの新しいフォームを jQuery ハンドラーに「再フック」する必要はありません。
名前空間: 使用例 1
jsbin.com/xalenefilifi/1/edit?html,js,consoleでライブ デモを参照してください (右上の [Run/Clear] をクリック) 。
/* bind form submission to 2 jQuery event handlers, each having a different namespace */
$(".js-form-hook-xyz").on("submit.hey", function() { console.log("hey!"); });
$(".js-form-hook-xyz").on("submit.hello", function() { console.log("hello!"); });
$(".js-form-hook-xyz").submit(); /* point 1: displays "hey!hello!" */
/* ... later in the code, unbind form submission for ONLY 1 handlers */
$(".js-form-hook-xyz").off("submit.hello");
$(".js-form-hook-xyz").submit(); /* point 2: displays "hey!" */
その結果、フォームが「ポイント 1」で送信されると、両方のハンドラーがアタッチされ、呼び出されます。その後、「ポイント 2」でハンドラー「submit.hello」がアタッチされなくなったため、他のハンドラーのみがトリガーされます。
名前空間: 使用例 2:
jsbin.com/vubolacozuwe/1/edit?html,js,consoleでライブ デモを参照してください (右上の [Run/Clear] をクリック) 。
/* bind form submission to 2 jQuery event handlers, each having the SAME namespace */
$(".js-form-hook-xyz").on("submit.greetings", function() { console.log("Bonjour!"); });
$(".js-form-hook-xyz").on("submit.greetings", function() { console.log("Hola!"); });
$(".js-form-hook-xyz").submit(); /* point 1: displays "Bonjour! Hola!" */
/* ... later in the code, unbind form submission for ".greetings" namespace handlers */
$(".js-form-hook-xyz").off(".greetings");
$(".js-form-hook-xyz").submit(); /* point 2: displays nothing, handlers were removed */
その結果、フォームが「ポイント 1」で送信されると、両方のハンドラーがアタッチされ、呼び出されます。その後、「ポイント 2」のハンドラー「.greetings」ネームスペース ハンドラーが削除されたため、何も表示されません。
今のところもっとクールなサンプルの使い方が思いつくかもしれないので、これは別の機会に譲ります。jQuery doc を調べて、SO または Google で同様のトピックを検索してください。きっと面白いものがたくさん見つかります。
資力:
- .on('click') と .click() の違い
- 特定のイベント ハンドラーのバインドを解除する方法
- http://api.jquery.com/on/#event-names
- api.jquery.com/on
- api.jquery.com/submit