使用appendTo()时,Click事件未绑定到动态元素

时间:2016-11-08 17:07:11

标签: javascript jquery html javascript-events

我知道对于动态dom元素我需要使用jQuery.fn.on或delegate,但如果我移动'元素容器附加到dom中的另一个元素,点击不再起作用。

以下是重现问题的jsFiddle: http://jsfiddle.net/j0L7c51f/

目前我使用以下绑定方法:

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

如果我注释掉使用appendTo()移动ul元素的代码行,则click事件绑定工作正常。

1 个答案:

答案 0 :(得分:3)

问题是由于您使用mousemove而不是委托事件处理程序引起的,因为每次鼠标移动时都会重新构建HTML。这意味着委托事件处理程序在单击的元素上被正确触发,但该元素会立即从DOM中删除,因此事件在传播到要处理的DOM之前被取消。

要解决此问题,请改用mouseenter上的a事件:

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

Updated fiddle