首页 >

javascript attachEvent绑定多个事件执行顺序问题【javascript】

web前端|js教程javascript attachEvent绑定多个事件执行顺序问题【javascript】
attachEvent,多个事件
web前端-js教程
常见的绑定事件有直接绑定在页面元素中比如
空间代刷网源码,vscode无法改为中文,ubuntu查看 ip,禁用tomcat日志记录,爬虫比例,php 浏览目录,惠州seo排名哪里好,做团队网站源码有哪些,phpcms动漫模板下载lzw
,这个换种方法也就是分离出来写在js代码里如document.getElementById(‘wrap’).onclick = function(){a();},此时如果需要绑定多个方法则直接写在一起即可如document.getElementById(‘wrap’).onclick = function(){a();b();}或
高仿 试客联盟源码,vscode配置ajax,虚拟机中更改ubuntu版本,tomcat主页修改,易语言的sqlite,预定机票的城市插件,前端框架哪个折叠导航好用,python爬虫在哪里提问,apache与php整合,seo备案影响,做网站中二级导航链接到一级导航,微信公众号网页平台源码下载,花店网页制作模板lzw
。然而我们时常这样来写一个单独的绑定方法bind(el,name,fn),具体代码如下。
java购物车源码,vscode打包后找不到文件,ubuntu arm开发,重启tomcat报错503,nw调用sqlite,30岁学网页设计,云服务器linux使用手册,php甘特图 插件,前端动态框架,蟒蛇和爬虫,php 设置不超时,新网站推广案例seo工作安排,springboot全态加密,阿里云 网站模版,mp4 网页播放器代码,教务管理系统静态模板,织梦登陆后台空白,js页面全屏,c 成绩管理系统源代码,微信小程序 上墙源码lzw
 
function bind(el,name,fn){ //绑定事件
return el.addEventListener?el.addEventListener(name,fn,false):el.attachEvent('on'+name,fn);
}

这样在一个dom对象上绑定多个click事件如

 
bind(document.getElementById('wrap'),'click',a);
bind(document.getElementById('wrap'),'click',b);

在ie6,7,8下面就会出现执行顺序的问题(ie9下面暂时不清楚,没有环境测试,希望有环境的朋友帮忙测试下),而其他浏览器ff,chrome,safari下则是按照顺序执行。查找资料得到的是ie8下会颠倒执行顺序,ie6,ie7则是随机执行的,这个我实在不明白ie怎么会出现随机执行?难不成是别有目的的?如果有知道这样做的目的的朋友也能告知一声,经过自己的测试证实ie8确实颠倒执行的顺序而ie6,7则无规律的执行。我理解的随机执行应该是每次执行都是不一样的顺序然而实际上只要写的时候顺序固定那么执行的时候顺序也是固定的(虽然无规律也或许是我没找出规律)。

但是jQuery的$.bind(type, data, fn)方法则没有这个问题,找jQuery的原代码看了下,发现里面也是用的

 
if (elem.addEventListener)
    elem.addEventListener(type, handle, false);
  else if (elem.attachEvent)
    elem.attachEvent("on" + type, handle);

这样方法绑定的事件,但是在此之前会判断该jquery对象上面是否已经同一个类型的handlers,如果有则不会重复绑定而是把该对象的handle合并到handlers中成为一个方法相当于这样function c(){a();b();},按照顺序的压入方法这样实现在ie下不会出现绑定多个方法时出现执行顺序混乱了.

如下是网友的回复:

IE6 7 会随机执行?我上次测试的时候貌似顺序相反,没有随机执行这一说。
我特意去测试了

 
var bind = function(e,t,fn){
if(e.addEventListener){
e.addEventListener(t, fn, false);
}else if(e.attachEvent){
e.attachEvent('on'+ t, fn);
}
}
test
var e = document.getElementById('test1');
bind(e,'click',function(){alert(1)});
bind(e,'click',function(){alert(2)});
bind(e,'click',function(){alert(3)});
bind(e,'click',function(){alert(4)});
bind(e,'click',function(){alert(5)});

并无随机一说 IE6。不知道你如何测试的。

作者的回答:
我拿你的代码在ie6,ie7下测试也是无规律的执行顺序,这里是资料出处http://www.w3help.org/zh-cn/causes/SD9011,上面所谓的随机执行我也觉得欠妥,就如我博文里说的那样,执行顺序是没有规律的,但是每次执行的顺序是一样的,如果是随机那么应该每次执行的顺序都不一样才对,这才是我想要说明的


javascript attachEvent绑定多个事件执行顺序问题【javascript】
  • JavaScript通过attachEvent和detachEvent方法处理带参数的函数【javascript】
  • JavaScript通过attachEvent和detachEvent方法处理带参数的函数【javascript】 | JavaScript通过attachEvent和detachEvent方法处理带参数的函数【javascript】 ...

    javascript attachEvent绑定多个事件执行顺序问题【javascript】
  • addEventListener和attachEvent二者绑定的执行函数中的this不相同
  • addEventListener和attachEvent二者绑定的执行函数中的this不相同 | addEventListener和attachEvent二者绑定的执行函数中的this不相同 ...

    javascript attachEvent绑定多个事件执行顺序问题【javascript】
  • 浅析jQuery事件之on()方法绑定多个选择器,多个事件【jquery】
  • 浅析jQuery事件之on()方法绑定多个选择器,多个事件【jquery】 | 浅析jQuery事件之on()方法绑定多个选择器,多个事件【jquery】 ...