刚刚可能没说清楚,我重新描述一下:
开始是<a class='a'>a1</a>
$('.a').bind('click',function(){
//调用jquery克隆一份a标签,做一些其他修改
});
然后变成这样
<a class='a'>a1</a>`
<a class='a'>a2</a>
问题:为什么点击a1可以调用上面那段jquery,而a2就不可以了? 1-3楼的方法我都试过了,还是没用.
刚刚可能没说清楚,我重新描述一下:
开始是<a class='a'>a1</a>
$('.a').bind('click',function(){
//调用jquery克隆一份a标签,做一些其他修改
});
然后变成这样
<a class='a'>a1</a>`
<a class='a'>a2</a>
问题:为什么点击a1可以调用上面那段jquery,而a2就不可以了? 1-3楼的方法我都试过了,还是没用.
为什么不能用?
因为你绑定的元素在页面文档结构生成后就已经绑定了,但是通过动态生成的dom结构是没法用先前的click方法的,因此你需要重新绑定或者是动态绑定,
$('div').delegate('a', 'click' ,function(){
//To do
})
当然了,如果还是不行,那么你可以考虑吧上面这个事件封装成一个方法,然后再//To do里面递归调用~
如果模块化批量方法,extend更好;
$(function(){
$.fn.extend{
simple:function(){
var root=$(this);
root.click(function(){
alert($(this));
})
}
}
$('.a').simple();
})
$('body').click(function(e){
var tar = e.target;
if($(tar).hasClass('a')){
xxxxx
}
});
这样就OK了!
1楼没答到点上,确实是动态追加dom的问题,所以需要通过委托父节点监听来解决,最简单的是委托文档节点,毕竟所有的dom都是追加在文档节点的后代中:$(document).on('click','.a',function(){...})
动态添加的dom 监听其父元素,例如
<div class="parent">
<div class="a"></div>
</div>
<script>
$(".parent").on("click",".a",function(){
//调用jquery克隆一份a标签,做一些其他修改
});
</script>
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
5 回答1.9k 阅读
楼主可以试下这个,官方推荐用
on
那个是因为动态添加元素吧,建议楼主去看下对于动态添加元素如何绑定事件的。
大概代码是这个样子的