2012-03-26 9 views
0

「に」私はthis postjQueryの:「ライブ」との違いは、関数の

を読んで、私はそれが答えだと思いませんでした質問がありました。なぜ、この仕事はありません:

$('#threeButtons').live('click', '.markAsSpam', function() { 
    // do some stuff 
}); 

が、これはそうではない:

$('#threeButtons').on('click', '.markAsSpam', function() { 
    // do some stuff 
}); 

私はパラメータが異なっている見るが、私は.on使用する方法の例を以下しています。少なくともそれは私の例に当てはまります。私はDOMに追加HTMLで取り扱っておりますので、私は.liveか.onを使用する必要が

<div id="threeButtons"> 
    <a href="#" class="markAsSpam">Spam</a> 
    ... 
</div> 

よう

私のDOMが見えます。また、私の.liveサンプルは初めての動作です。ページを更新せずに、連続して試行するには何が必要ですか。私はjQuery 1.7を使用していて、.liveは非推奨になっています。ドキュメントから

+1

2番目の引数を '.live()'に誤って使用しています。これはイベントオブジェクトにデータを設定することを意味します。 jQueryの 'live()'、 'delegate()'および 'on()'メソッドは* event delegation *を使用します。それらを使用する前にそれについて学ぶ価値があるでしょう。 * '.on()'メソッドは、2番目の例のように2番目の引数を渡すときにのみイベントデリゲーションを使います。)* –

+0

... '.live()'は、ドキュメント。これは残念な決定だったので、廃止されました。 –

答えて

1

$('#threeButtons').live('click', '.markAsSpam', function() { 
    // do some stuff 
}); 

.live(events, data, handler(eventObject))

は、したがって、次のコードは、単に追加の引数.markAsSpamを受け取ることになります#threeButtonsのためのライブクリックイベントを登録しますただし、.on()を使用すると、clickハンドラは#threeButtonsにバインドされていますが、クリックされた要素が.markAsSpamセレクタと一致する場合にのみイベントが発生します。

+0

Yep:http://jsfiddle.net/DHK2m/1/ –

+0

または違いを実証するためのhttp://jsfiddle.net/ThiefMaster/DHK2m/2/ – ThiefMaster

+0

Gotcha。しかし、なぜそれは一度しか働かないのですか?スパムボタンはすべてのアイテムに表示されます。これらはforループで追加され、追加されます。 – sehummel

関連する問題