可以使用jquery的事件委托来实现。
假如有这么一段代码
<div>
<p>111</p>
<p>222</p>
<p>333</p>
</div>
需要给p绑定点击,但是p是动态加入的,现在只有3个p,但以后会不断添加,会有4个,5个。。。n个。
为了实现给动态加入的p也绑定点击事件,可以这么写
$("div").on("click","p",function () {
alert("msg");
});
这样不管添加多少个p,都是具有点击事件的。
在很长的一段时间内,我都不知道有这种写法,囧。以前碰到这种问题,都是生成一个dom,然后每次去clone这个dom并且绑定事件,最后插入到页面中。
对于事件委托我是知道的,当时看锋利的jquery里面有提,当时感觉这是一种代码优化,并没有解决啥新问题,导致我好几次错过了这种方法,可是写了不少冤枉代码啊,蛋疼的很。
现在来看这种解决方案,确实与事件委托密不可。子元素获得点击后会冒泡到父元素,此时需要判断实际触发事件的元素是否符合我们给的子元素选择器,如果满足则执行回调。这也意味着,我们父元素不可以选的太大,比如把父元素选成body,虽然可以实现,但每个事件触发时,都需要判断一下来源,那效率肯定就低了。