国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

javascript attachEvent綁定多個(gè)事件執(zhí)行順序問題

2019-11-21 00:11:25
字體:
供稿:網(wǎng)友
常見的綁定事件有直接綁定在頁面元素中比如<div id="wrap" onclick="a();"></div>,這個(gè)換種方法也就是分離出來寫在js代碼里如document.getElementById('wrap').onclick = function(){a();},此時(shí)如果需要綁定多個(gè)方法則直接寫在一起即可如document.getElementById('wrap').onclick = function(){a();b();}或<div id="wrap" onclick="a();b();"></div>。然而我們時(shí)常這樣來寫一個(gè)單獨(dú)的綁定方法bind(el,name,fn),具體代碼如下。
復(fù)制代碼 代碼如下:

function bind(el,name,fn){ //綁定事件
return el.addEventListener?el.addEventListener(name,fn,false):el.attachEvent('on'+name,fn);
}

這樣在一個(gè)dom對(duì)象上綁定多個(gè)click事件如
復(fù)制代碼 代碼如下:

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

在ie6,7,8下面就會(huì)出現(xiàn)執(zhí)行順序的問題(ie9下面暫時(shí)不清楚,沒有環(huán)境測(cè)試,希望有環(huán)境的朋友幫忙測(cè)試下),而其他瀏覽器ff,chrome,safari下則是按照順序執(zhí)行。查找資料得到的是ie8下會(huì)顛倒執(zhí)行順序,ie6,ie7則是隨機(jī)執(zhí)行的,這個(gè)我實(shí)在不明白ie怎么會(huì)出現(xiàn)隨機(jī)執(zhí)行?難不成是別有目的的?如果有知道這樣做的目的的朋友也能告知一聲,經(jīng)過自己的測(cè)試證實(shí)ie8確實(shí)顛倒執(zhí)行的順序而ie6,7則無規(guī)律的執(zhí)行。我理解的隨機(jī)執(zhí)行應(yīng)該是每次執(zhí)行都是不一樣的順序然而實(shí)際上只要寫的時(shí)候順序固定那么執(zhí)行的時(shí)候順序也是固定的(雖然無規(guī)律也或許是我沒找出規(guī)律)。

但是jQuery的$.bind(type, data, fn)方法則沒有這個(gè)問題,找jQuery的原代碼看了下,發(fā)現(xiàn)里面也是用的
復(fù)制代碼 代碼如下:

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

這樣方法綁定的事件,但是在此之前會(huì)判斷該jquery對(duì)象上面是否已經(jīng)同一個(gè)類型的handlers,如果有則不會(huì)重復(fù)綁定而是把該對(duì)象的handle合并到handlers中成為一個(gè)方法相當(dāng)于這樣function c(){a();b();},按照順序的壓入方法這樣實(shí)現(xiàn)在ie下不會(huì)出現(xiàn)綁定多個(gè)方法時(shí)出現(xiàn)執(zhí)行順序混亂了.

如下是網(wǎng)友的回復(fù):

IE6 7 會(huì)隨機(jī)執(zhí)行?我上次測(cè)試的時(shí)候貌似順序相反,沒有隨機(jī)執(zhí)行這一說。
我特意去測(cè)試了
復(fù)制代碼 代碼如下:

<script type="text/javascript">
var bind = function(e,t,fn){
if(e.addEventListener){
e.addEventListener(t, fn, false);
}else if(e.attachEvent){
e.attachEvent('on'+ t, fn);
}
}
</script>
<a href="#" id="test1">test</a>
<script type="text/javascript">
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)});
</script>

并無隨機(jī)一說 IE6。不知道你如何測(cè)試的。

作者的回答:
我拿你的代碼在ie6,ie7下測(cè)試也是無規(guī)律的執(zhí)行順序,這里是資料出處http://www.w3help.org/zh-cn/causes/SD9011,上面所謂的隨機(jī)執(zhí)行我也覺得欠妥,就如我博文里說的那樣,執(zhí)行順序是沒有規(guī)律的,但是每次執(zhí)行的順序是一樣的,如果是隨機(jī)那么應(yīng)該每次執(zhí)行的順序都不一樣才對(duì),這才是我想要說明的
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 郑州市| 行唐县| 北京市| 上饶市| 彰化县| 广汉市| 滦平县| 水富县| 新龙县| 嵊州市| 崇礼县| 犍为县| 盐津县| 霍城县| 逊克县| 临洮县| 广汉市| 阜平县| 湖南省| 安新县| 隆化县| 浠水县| 台中市| 寿宁县| 资中县| 金堂县| 浠水县| 长治市| 西宁市| 江西省| 大同市| 定襄县| 海口市| 抚顺县| 新宾| 广平县| 开阳县| 隆昌县| 阜新| 宣城市| 望江县|