为什么在重新追加元素时单击事件不起作用
Why click event don`t work when re-append element?
为什么点击事件在此代码中不起作用(JSFiddle:http://jsfiddle.net/3WeP5/):
var holder = $("<div></div>");
$(document.body).append(holder);
var btn = $("<button>Click Here</button>");
btn.click(function(){alert('clicked');});
holder.append(btn);
holder.html("");
holder.append(btn);
你可以替换这行:
btn.click(function(){alert('clicked');});
带(不再工作):
btn.bind("click",function(){alert('clicked');});
如果我不使用jquery并像这样设置javascript事件,它会很好!!
btn[0].onclick=function(){alert('clicked');}
当我重新附加元素(按钮)时,为什么点击事件不起作用?我如何修复它
查看.html()
:的文档
当使用.html()设置元素的内容时在该元素中被新内容完全取代。此外,jQuery还删除了数据和事件等其他构造处理程序,然后将这些元素替换为新内容。
holder.html("");
正在移除按钮的处理程序。如果你想保留它,你可以使用clone
作为:
holder.append(btn.clone(true));
holder.html("");
holder.append(btn.clone(true));
在上尝试on
jQuery
// You are better off just adding a id to the button
var btn = $("<button id='"someButton'">Click Here</button>");
$(document).on('click', '#someButton', function(){
alert('clicked');
});
这样做的目的是向文档添加一个点击监听器,当有人点击文档时,它会检查event.target === btn
是否
这是一个演示
事件不起作用的原因是jQuery.html();
删除了事件侦听器,因此在此处确认https://github.com/jquery/jquery/blob/master/src/manipulation.js#L231
JSFiddle
使用事件委派:
$(document.body).on('click', btn, function() {
alert('clicked!');
});
您的代码不起作用,因为当第一次加载脚本时,它将函数绑定到该特定元素,但当您添加另一个脚本时,脚本不会再次运行,因此附加的元素不会绑定其事件。当我们添加事件委派时,我们的目标是document.body
,因此当脚本加载时,事件将绑定到body
上的那个元素。
演示。
对于jQuery的早期版本,您可以使用以下版本:
$(document.body).delegate(btn, 'click', function() {
alert('clicked!');
});
相关文章:
- 对同一类中的所有元素单击一次
- 元素单击处理程序由一个神秘的函数取消设置
- 在处理元素单击事件期间,在循环内部调用window.open()
- JS-是否可以获得元素单击位置的确切宽度
- 使用 jQuery 创建动态元素 单击事件始终返回 for 循环中的最后一个索引
- 选中父元素单击上的复选框
- 在窗口和其他元素单击时隐藏
- Polymerjs 的自定义菜单元素单击事件
- 使用 javascript 函数查找元素单击的类
- 元素单击仅使用 javascript
- 等待文档鼠标按下完成,然后元素单击才能开始
- 由于父元素的顶部和位置,子元素单击不起作用
- Jquery-在共享相同类名的其他元素之间选择一个元素(单击时)
- 目标元素单击子元素,获取父属性
- 根据元素单击更改选择选项值
- 为listview上动态生成的元素单击event
- 扩展原生元素单击事件
- 可以被许多元素使用的Javascript函数,然后区分哪个元素单击了它
- 当元素单击时隐藏iframe
- 按钮元素单击事件以切换类不起作用