2012-03-28 8 views
1

一部のメソッドを$(selector).live('click', function(){});から$(selector).on('click', function(){});に変更しました。on()メソッドがlive()として機能しない

最初はまったく同じように動作するようです。しかし、DOMに新しいhtmlを挿入すると、同じセレクタで挿入された新しい要素は、$(selector).on('click', function(){});でキャッチされず、live()メソッドでキャッチされる前に挿入されます。

なぜですか?私は何かが欠けている?

+0

HTTPの可能性のある重複:// stackoverflowの.com/questions/8021436/jquery-1-7-turning-live-on-on –

+0

あなたが何を使用しているかを再確認セレクタ。 'document'に変更することでテストできます。 'document'で動作する場合、セレクタは間違っています。 – Brad

+0

* "私は何か不足していますか?" *おそらくドキュメントの良い読書でしょう。 –

答えて

4

.onは、.liveと比較して異なるパラメータセットをとります。 1つをもう1つの に置き換えることはできません(そして $(selector).on.liveは意味をなさない)

正しい構文は次のとおりです。

$(document).on('click', selector, function(){}); 

これは、それらがDOMに追加されたときに関係なくselectorと一致していないすべての要素にバインドします。

注:

代わりのdocument、あなたがいる限り、その親がDOMにとどまるように、要素(複数可)の親を使用することができます。例えば

<div id="myDiv"> 
    <p>Hello World</p> 
    <p>Hello World</p> 
</div> 

次に、あなたが行うことができます:イベントが#myDivに追加されたすべての<p>タグを起動します]をクリックし

$('#myDiv').on('click', 'p', function(){}); 

を。

注:

$(selector).on('click', function(){}) 

$(selector).bind('click', function(){}) 

をやってと同じである(jQueryの1.7.1が.on代わりの.bindを使用することを提案している)

+0

ドキュメントに添付するのは、生産性が悪いかもしれません。変更されない要素は、イベントが上部にバブリングするのを防ぐでしょうか?または私は間違っていますか? – mddw

+0

@mdi:親がDOMにとどまっている限り、必要な要素の親にイベントをアタッチすることができます。委任されたイベントでバブリングがどのように機能するかはあまりよく分かりません。 –

+0

@mdi:イベントは、 'on'が呼び出された要素(つまり、委譲されたイベントを実行する要素)までバブルし、' document'まで続きます。 http://jsfiddle.net/GdjPT/1/ –

関連する問題