2016-11-08 3 views
2

動的DOM要素については、jQuery.fn.onまたは委譲を使用する必要がありますが、ドーム、クリックはもう働きません。ここでappendTo()が使用されたときにClickイベントが動的要素にバインドされていない

はjsFiddleは、問題を再現することである。 http://jsfiddle.net/j0L7c51f/

現在、私は、次のbindメソッド使用しています:私はUL要素を移動するコード行をコメントアウトした場合

$('#commoditySelector').on('click', 'li.available', function() { 
    var cmID = $(this).attr('data-cmid'); 
    $('#debug').html('commoditySelected: '+ cmID); 
}); 

をappendTo()を使用すると、clickイベントの境界がうまく動作します。

答えて

3

この問題は、マウスが移動するたびにHTMLが再構築されるため、委任イベントハンドラではなく、mousemoveを使用することによって発生します。つまり、委任されたイベントハンドラはクリックされた要素で正しく起動されますが、その要素はすぐにDOMから削除されるため、処理されるDOMを伝播する前にイベントがキャンセルされます。

$('#commodityCategories li a').mouseenter(function(e) { 
    // your code... 
}); 

Updated fiddle

+0

パーフェクトMR:

は、この問題を解決するには、代わりにamouseenterイベントを使用します。 Rory –

+0

@Roryあなたは完全に正しいです!また、メインの3つのリスト項目の上でマウスを速く動かすと、ドロップダウンリストがキューがキャンセルされていないかのように複数回開いて閉じるのはなぜですか?私はstop()とclearQueue()の両方を試しました – Giox

+1

- 'mouseenter'と' mouseleave'の '#commodityList'要素に' stop(true) 'を呼び出す必要があります:http://jsfiddle.net/ j0L7c51f/5 /。私はまた、いくつかの繰り返しセレクタをクリアするためにいくつかの調整を行いました。 –

関連する問題