目前,我了解到为了将事件监听器附加到动态添加的元素上,您必须在添加元素后重新定义监听器。
有没有任何方法可以绕过这个问题,使您不必执行整个额外的代码块呢?
使用.on()
,您可以定义一个函数一次,并且它将对任何动态添加的元素执行。
例如:
$('#staticDiv').on('click', 'yourSelector', function() {
//do something
});
.one("mouseenter"
,但遇到了同样的障碍,有人可以帮忙吗?@Wiz - pavitranbody
元素(例如 $('body').on('click','.yourSelector', function () {...})
)。 - Jack$(document).on('click', 'selector', handler);
其中click
是事件名称,而handler
是事件处理程序,比如引用一个函数或匿名函数function() {}
PS:如果您知道要添加动态元素的特定节点,可以将其指定为document
的替代项。
$(document)
。事件应该绑定到最近的静态父元素。 - Joseph Silber您正在动态生成这些元素,因此在页面加载时应用的任何监听器都将不可用。我已经使用正确的解决方案编辑了您的fiddle。基本上,jQuery通过将事件附加到父元素并向下传播到正确的动态创建的元素来保留事件以供稍后绑定。
$('#musics').on('change', '#want',function(e) {
$(this).closest('.from-group').val(($('#want').is(':checked')) ? "yes" : "no");
var ans=$(this).val();
console.log(($('#want').is(':checked')));
});
$('<div>...</div>').hoverCard(function(){...}).appendTo(...)