delegate

问题背景:我有一张表,叫做表一,在HTML已经写好了,表一里面有几个元素是绑定了事件的,然后现在我需要在同一个页面中去加载另一张表(因为表头不一样),叫做表二,重新替代表一,然后我就要删除表一,重新再拼凑出表二,表二中需要用到那几个元素的事件。


实现:开始我是用(selector).click()来绑定事件的,然后删除的时候,我就想,删除有几种方法,remove,detach,empty,我很自然的就用了delegate,因为他尽管删除了元素,但是还会保留元素绑定的方法,我是认为只要选择器中包含这个元素的事件都会保留,接着,我就敲上去了,敲完之后,发现删除这个元素再重新添加这个元素之后,事件没了!!接着,我检查了语法也没错,在事件写alert(),调试了几下发现确实真的没有触发到那个事件,接着我就奇怪了,接着我就想,是不是选择不到那个JQuery对象,为了验证这个,我就再删除了元素重新添加元素后再重新绑定一个函数,然后发现能触发事件了,证明了一点就是选择不到那个JQuery对象,然后仔细再一看,原来我(selector).click(“”)的选择器里面是包括了删除元素的子元素,而我删除的元素是它的父元素,,那是不是这样就不行,就好像<div id="haha"><div id="xixi"><><>,绑定的函数("#haha #xixi").click(),然后("#haha").detach(),虽然能够保留选择器的触发事件,但是因为事件的绑定的选择器与删除的选择器不一样,因此事件无法被留住,为了验证这个的准确性,我就写了一个小demo去试试,后来确实不行,证明了假设,然后我绑定事件的选择器和删除事件的选择器一样,就成功了。后来我就想,那既然表中的元素都不变的,那么我就用on()的方法来绑定事件吧,on的方法可以为当前存在的元素或者未来存在的元素来添加事件,最后我就成功了。


收获:当遇到不确定的原因时,最好写demo去一步一步验证是哪里出现的问题,当你在一个源头解决不到问题,你就要从另一个源头去解决,不能钻牛角尖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值