【发布时间】:2012-08-17 09:59:46
【问题描述】:
所以现在,我知道要将事件侦听器附加到动态添加的元素,您必须在添加元素后重新定义侦听器。
有没有办法绕过这个,所以你不必执行整个额外的代码块?
【问题讨论】:
-
香草js解决方案:stackoverflow.com/a/27373951/1385441
所以现在,我知道要将事件侦听器附加到动态添加的元素,您必须在添加元素后重新定义侦听器。
有没有办法绕过这个,所以你不必执行整个额外的代码块?
【问题讨论】:
$(document).on('click', 'selector', handler);
其中click 是事件名称,handler 是事件处理程序,例如引用函数或匿名函数function() {}
PS:如果您知道要添加动态元素的特定节点 - 您可以指定它而不是 document。
【讨论】:
$(document)。该事件应绑定到最近的静态父级。
使用.on(),您可以定义一次您的函数,它将针对任何动态添加的元素执行。
例如
$('#staticDiv').on('click', 'yourSelector', function() {
//do something
});
【讨论】:
使用 jquery 插件调用添加新元素时,您可以执行以下操作:
$('<div>...</div>').hoverCard(function(){...}).appendTo(...)
【讨论】:
您正在动态生成这些元素,因此在页面加载时应用的任何侦听器都将不可用。我已经用正确的解决方案编辑了你的小提琴。基本上,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')));
});
【讨论】: