Wir wissen, dass jede Methode zum Binden eines Ereignisses in jQuery ihre entsprechende Methode zum Entfernen der Ereignisbindung hat. Beispielsweise entspricht off() on(), unbind() entspricht bind() und die() entspricht live (). Ich bin sehr neugierig, wie diese Art der Entbündelung anonymer Ereignisse implementiert wird. Der Quellcode von jQuery ist zu esoterisch und schwer zu verstehen. Kann ein Experte eine vereinfachte Version des Codes veröffentlichen, um das Implementierungsprinzip zu analysieren?
我觉得要理解off处理,得先理解on的操作,去年读过jquery2.x的源码,事件这块挺复杂的。
翻看了一下自己粗糙的笔记,关于事件这块当时讲解视频没有提及自己硬着头皮看的。
关于绑定事件可以结合on源码实现以及jquery.event.add方法:
我的理解是 jquery主要对元素设置缓存数据cache,cache存储了events变量 (事件回调队列集合),以“事件”:“回调函数数组”的形式存储,用以实现多次给某个dom添加事件时,回调都能触发,而实际真正用原生事件绑定的是对这个回调函数数组的遍历执行。
而对于off,先看看off的源码部分:
看到最后 一句,就知道,实际它调用了
jQuery.event.remove
方法。remove方法
主要是对元素获取前面on时存放在cache的events变量对事件键值对进行删除等操作。
如果只是
$(xx).off('click')
,那么就是直接遍历把events里click事件对应的回调函数组都给删了,如果off参数还传了特定的回调函数,那么则是对回调数组遍历比对,删除对应的回调函数……对于jquery源码这块,前期基础部分推荐看 妙味课堂 的视频, 其他可以看 http://www.cnblogs.com/aaronj... 大牛博文,或者购置jquery源码解析类似书籍。
源码涉及的细节太多, 一时半会我也整理不出来= =,我就把大致观点表述一下……有啥理解错误请指正~
以下是on的代码