2012-03-29 10 views
4

.live().on()に変更しようとしています。以前は廃止されました。jqueryを.onに変更する

私はそれがどのように動作するかを理解するのに苦労しています。私はこのコードを使用し、それがうまく働いた前に...

$('#lightBoxClose').live('click', function() { 
    $('#lightBox').fadeOut(); 
}); 

は、だから私は

$('#lightBoxClose').on('click', function() { 
    $('#lightBox').fadeOut(); 
}); 

、それを変更しようとしたが、それは動作しません。誰も私がやっていることになっていますかを説明してくださいすることができますありがとう。

+1

可能な重複:http://stackoverflow.com/questions/8042576/whats-the-difference-between-jquery-live-and-on –

+0

を参照してくださいdocument要素を使用して、例えば

、 http://api.jquery.com/on/ –

答えて

9

あなたは2番目の引数としてターゲットセレクタを渡し、すでに結合時に存在している要素にバインドする必要があります。その要素は最終的なクリックターゲットの祖先でなければならず、バブリングされたイベントを捕捉できます。この技術は委任と呼ばれています。

$(document).on('click', '#lightBoxClose', function() { 
    $('#lightBox').fadeOut(); 
}); 
+2

の一番下の例本当ですか?それはとても残念です。なぜデフォルトではウィンドウにバインドされませんか? – Anthony

+0

@Anthony、 '.on()'は '.live()'を置き換えるだけではないので、すべてのイベントをバインドする標準的な方法です。したがって、常に 'document'にバインドしたいと仮定して委任を強制することはできません。 (注:DOMイベントは届かないので、 'window'オブジェクトにバインドすることはできません。) – bfavaretto

+0

@ bfavaretto:これが当てはまる場合、' .click() 'のようなバインディング省略表現の関数は、既存の要素ですか? '$(document)。$( '。my_controllers')のように。クリック(" blah ")'?それは特定のパネルにとって重要ではない場合に誰もが 'document'を使用するときに、親を事前に確立しなければならず、b)jqueryをより簡単にするイベント固有の簡略メソッドを失わなければならない見て、書く。私はそれが私と同じように怠惰で弱い方法から遠ざかっているように見えます。 – Anthony

関連する問題