扫码关注官方订阅号
如题,主要是想问bind on delegate live进行多事件绑定的原理
人生最曼妙的风景,竟是内心的淡定与从容!
$ele.on('eventName', handle1); $ele.on('eventName', handle2); $ele.on('eventName', handle3);
其实$ele元素的eventName事件有一个处理函数数组 监听一次就往里面放一个handle, 数组是先进后出型的也就是栈, 然后触发事件的时候一次执行
上面的监听相当于
$ele.eventHandle['eventName'] = []; $ele.eventHandle['eventName'].push(handle1); $ele.eventHandle['eventName'].push(handle2); $ele.eventHandle['eventName'].push(handle3);
然后$ele.trigger('eventName')触发的时候, 从栈里面取出处理函数执行
while($ele.eventHandle['eventName'].length) { handle = $ele.eventHandle['eventName'].pop(); handle(); }
最先监听的最后执行
我猜应该是这样
我不知道jQuery是如何实现的。但原生的js通过addEventListener(),attachEvent()(IE)也可以绑定多个事件。
jQuery
js
addEventListener()
attachEvent()
bind() 方法为被选元素添加一个或多个事件处理程序,并规定事件发生时运行的函数。on() 方法事件处理程序到当前选定的jQuery对象中的元素。delegate() 方法为指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。live() 方法为被选元素附加一个或多个事件处理程序,并规定当这些事件发生时运行的函数
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
其实$ele元素的eventName事件有一个处理函数数组 监听一次就往里面放一个handle, 数组是先进后出型的
也就是栈, 然后触发事件的时候一次执行
上面的监听相当于
然后$ele.trigger('eventName')触发的时候, 从栈里面取出处理函数执行
最先监听的最后执行
我猜应该是这样
我不知道
jQuery是如何实现的。但原生的js通过addEventListener(),attachEvent()(IE)也可以绑定多个事件。bind() 方法为被选元素添加一个或多个事件处理程序,并规定事件发生时运行的函数。
on() 方法事件处理程序到当前选定的jQuery对象中的元素。
delegate() 方法为指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。
live() 方法为被选元素附加一个或多个事件处理程序,并规定当这些事件发生时运行的函数