2010-12-11 12 views
1

jQuery.liveを使用することの短所の1つは、.stopPropagation()の利用できないことです。しかし、私はそれがひどく必要です。jQuery.liveを使用してstopPropagationを模倣する方法

ここは私の使用例です。現在、クリックにバインドされているチェックボックスがあります。しかし、他のチェックボックスがAJAX呼び出しを介して画面に表示されます。つまり、実際には.live('click', fn)が必要です。残念ながら、チェックボックスはクリック可能な別の要素の上にあり、.stopPropagation()が必要です。これは.bind('click', fn)でうまく動作しますが、.live()と一緒に使用できないことは私を邪魔しています。 return falseを使用すると、チェックボックスがオンになっていないため、機能しません。

.stopPropagation()を偽装することなく.live()を使用すると、どのように模倣するかに関するアイデアはありますか?

答えて

1

代わりのチェックボックスに.liveハンドラを結合、要素はイベントの対象あるに依存して動作して、コンテナに賢くイベントハンドラをバインドします。

$("#container").click(function(e) { 
    var ele = e.target; 
    if(ele.tagName.toLowerCase() == 'input' 
     && ele.type.toLowerCase() == 'checkbox') { 
     e.stopPropagation(); 
     // do something special for contained checkboxes 
     // e.g.: 
     var val = $(ele).val(); 
    } 
}); 

Hereは、これがどのように使用されるかを示す例です。

+0

私はこれがかなり機能するかどうかはわかりません。私のアップデートをチェックして、私の言いたいことを見てください:http://jsfiddle.net/g5bn4/3/。私は 'jQuery.live()'を使ってチェックボックスを追加し、あなたのIDをクラスに変更して、2つを使用できるようにしました。チェックボックスをクリックしても、 'e.stopPropagation'の呼び出しは実行されません。 –

+0

@Josh - あなたのajax呼び出しで置き換えられない*外側のコンテナに 'bind'を使用します。 http://jsfiddle.net/g5bn4/7/を参照してください。 – karim79

関連する問題