需求如下:在我使用JQGrid的时候,发现有个click事件给行,和行内的checkbox同时添加了,如果解绑就会同时解绑,我希望解绑前,把事件绑定到checkbox里面先。
以下用div进行模拟
首先给div#a ==(后面皆用a代替)==添加一个click方法,这里简单说明以下onclick和click区别,onclick是事件,表示游览器接收到的操作,click代表方法,用来触发onclick事件,可以简单理解就是在事件上面在封装了一层函数(方法)。我现在就是想让div#b ==(后面皆用b代替)==也可以触发alert。你可能会想在写多一个不就可以了吗?但是在真实操作别人的工具时候,并没有那么简单。基于万物皆对象的原理,我想找到绑定在a里面的函数把他赋值给b。
先给一些错误的操作,不喜欢可以跳过此处
首先先给出我一开始以为可以的操作,第一个就不说了确实可以触发,但是是触发a里面的事件,b-》a-》function。b本身是没有自己的方法,所以在a解绑后,方式1没有反应。第二个是我以为可以成功的,想法和思路都已经靠边了,但还是失败了,没有生效。
高潮来了!!!
<!--在调试jquery的事件绑定时会用到。查看某元素是否绑定上了事件。-->
<!--在JQuery1.8之前:-->
var obj=$('div');
var events=obj.data('events');
<!--在JQuery1.8中,之后:-->
var objs=$('div');
var events=$._data(objs[0],'events');
<!--为了兼容-->
var events=$('div').data('events')||$._data($('div')[0],'events');
var events=$._data($('#a')[0],'events')
console.log(events);
== 注意1.8以后是要给定的JS对象,而不是JQ对象 ==
看一下这个events对象,这个对象属性是”方法名“,值是一个‘方法数组’,也就是说同一个对象的同一个方法可以绑定多个函数。结合我之前学到的JQ为了兼容ie 给元素添加EventCache对象(link) 数组里面就是给定的方法,亮点就是handler属性那个 f(e),就是我写的那个方法。那么解决办法就显而易见的了。
!