使用jQuery动态加载html元素,但是元素上面又绑定了Click等事件,针对新添加的元素这些事件是无效的
部分代码如下:
- ………………
- var history=“<ul><li class=’t’>” + scanType + “</li>”
- history+=“<li class=’p’>” + ’发现了’ + scanFileNumber + ’个威胁’+ “</li>”
- history+=“<li class=’m’>” + scanTime + “</li>”
- history+=“</ul><li class=’s’><span data-dsp=buf>报告</span></li>”
- $(“.h_scan .dsp”).append(history);
- });
- }
- });
- }
- $().h_add();
- $(“.dsp .s span”).click(function(){
- var $this=$(this).attr(“data-dsp”);
- alert($this);
- });
后来改为为每个点击span加个id,断点去调试,发现取值居然是空的
- var history=“<ul><li class=’t’>” + scanType + “</li>”
- history+=“<li class=’p’>” + ’发现了’ + scanFileNumber + ’个威胁’+ “</li>”
- history+=“<li class=’m’>” + scanTime + “</li>”
- history+=“<li class=’s’><span id=’dsp_”+ scanTime +“‘ data-dsp=buf>报告</span></li></ul>”
- $(“.h_scan .dsp”).append(history);
- $(“#dsp_”+scanTime).click(function(){
- var con=$(“#dsp_”+scanTime).attr(“data-dsp”);
- alert(con);
- });
百度了一下:
而解决这个问题只需要修改一个地方就可以了:
` var history=”
“ + scanType + “
“history+="* " + '发现了' + scanFileNumber + '个威胁'+ "
“
history+="* " + scanTime + "<li class='s'><span data-dsp=buf>报告</span></li>" $(".h_scan .dsp").append(history); }); } }); } $().h_add(); $(".dsp .s span").**live("click"**,function(){ var $this=$(this).attr("data-dsp"); alert($this); });`
live方法
live( type, fn )
jQuery 1.3中新增的方法。给所有当前以及将来会匹配的元素绑定一个事件处理函数(比如click事件)。也能绑定自定义事件。
目前支持 click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, keydown, keypress, keyup。
还不支持 blur, focus, mouseenter, mouseleave, change, submit
与bind()不同的是,live()一次只能绑定一个事件。
这个方法跟传统的bind很像,区别在于用live来绑定事件会给所有当前以及将来在页面上的元素绑定事件(使用委派的方式)。比如说,如果你给页面上所有的li用live绑定了click事件。那么当在以后增加一个li到这个页面时,对于这个新增加的li,其click事件依然可用。而无需重新给这种新增加的元素绑定事件。
on 方法
但是随着jQuery的版本升级,自从jQuery 1.9及其以上已经无法使用live了,那么没有办法了吗,不是的,对于jQuery1.9版本及其以上可以使用on,其效果等同于live。