2011-01-24 21 views
0

私はIDがsomenameで始まるチェックボックスのグループを持っています。これらのチェックボックスのクリックイベントを捕捉したいと思います。以前はjqueryでこれを行っていました。すなわち$("input[id^='somename']").click(function(){ // my code follows here }) となりますが、今回は動作しません。どうして?Jquery on clickイベントがトリガーされないのはなぜですか?

P.S.要素は、いくつかのAjaxリクエストの後にページが完全にロードされた後にjavascriptを介して作成されます。これが問題なのかどうかわかりません。

答えて

2

liveを使用すると、ページが読み込まれた後に要素が作成されます。

$("input[id^='somename']").live('click', function(){ // my code follows here }) 

P.S:あなたの検索セレクタは "somenameの" ですが、あなたは、あなたが望んでいないことが確実で、属性IDでそれを検索します。代わりに

$("input[name^='somename']").live('click', function(){ // my code follows here }) 

+0

おかげで...完璧に動作します。.. –

+0

正解のための1、あなたは、このためにIDを使用しないことを言及します。 – Exelian

+0

それは素晴らしかった.. 'somename'を入れて申し訳ありません' someid'だったはずです –

0

.click()の代わりに.change()イベントを試してください。

1

これは実際問題です。 .live()

$("input[id^='somename']").live('click', function(){ // my code follows here }) 

.clickを交換して、あなたは問題ないはずです。
.clickへの呼び出しが.bind('click', fnc)のショートカットにすぎないため、これを呼び出すときに要素がDOMにない場合、これは機能しません。 .live()を使用するよりも、.delegate()を使用する方が良いでしょう。読み取りを持っている:

.live().delegate()

+0

完璧な答えをありがとう... :) –

1

標準的な結合機能を使用するだけで、バインド時には存在して要素に取り組んでいます。イベント委譲と呼ばれるものを使用する必要があります。ここでは、DOMツリーの上位の要素に子孫要素のイベントが通知されます。これを行うための最善の方法は.delegate()である:

$('#containingElement').delegate("input[id^='somename']", 'click', function(){ 
    // your code here 
}); 

これは、あなたが上のイベントをキャプチャしたいすべての要素が含まれている要素#containingElementを持っていることを前提としています。

NBその他の回答はliveと答えています。 livedelegateは同じバックエンドコードを使用しますが、さまざまな理由でdelegateがより効率的です。

1

これは、DOMで動的に作成された要素に適用されるため、jQueryを使用する必要があると考えています。 live()方法:

$("input[id^='somename']").live('click', function(e) { 
    // Your code 
}); 
関連する問題