程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> javascript-用自定義的傳統事件綁定函數代替attachEvent的一些問題

javascript-用自定義的傳統事件綁定函數代替attachEvent的一些問題

編輯:編程綜合問答
用自定義的傳統事件綁定函數代替attachEvent的一些問題

我看了一個教程,上面寫了一個用自定義的傳統事件綁定函數來代替IE8及以上的老IE的attachEvent方法,主講老師寫了一點看不懂,哪位能解釋一下,代碼如下:
HTML代碼:

<body>
    <input type="button" value="按鈕" id="button" />
</body>

JS代碼:

addEvent(obj, type, fn){
    //先創建一個保存事件的容器obj.events對象
    if(!obj.events) obj.events = {};

    //再創建一個保存事件處理函數的容器obj.events[type]數組
    if(!obj.events[type]){
        var obj.events[type] = [];
        if(obj['on'+type]) obj.events[type][0] = fn;  //這裡就不同了,先寫出主講老師的方法
    }
    //第二次執行時保存
    obj.events[type][addEvent.ID++] = fn;

    //開始執行
    obj['on'+type] = function(){
        for(var i in obj.events[type]){
            obj.events[type][i]();
        }
    }
}

//事件計數器
addEvent.ID = 1;

//開始執行
addEvent(window, 'load', function(){
    var button = document.getElementById('button');
    addEvent(button, 'click', fn1);
    addEvent(button, 'click', fn2);
    addEvent(button, 'click', fn3);
});

function fn1(){
    alert(1);
}

function fn2(){
    alert(2);
}

function fn3(){
    alert(3);
}

主講老師在用obj.events[type][0]保存fn時,前面加了一個判斷,即if(obj['on'+type]),這個判斷的結果是點擊了按鈕後,分別彈出1、2、3,而不加這個判斷,則為1、1、2、3四次。

我自己沒有用這個辦法,而是加了一個else分支,也能實現彈出1、2、3三次

if(!obj.events[type]){
    var obj.events[type] = [];
    obj.events[type][0] = fn;
} else {
    obj.events[type][addEvent.ID++] = fn;
}

我想問的是,主講老師講的辦法即加了一個if(obj['on'+type])的判斷是如何起作用的?為何加了之後也能將原來多出來的一次1彈窗去掉呢?

最佳回答:


http://m.blog.csdn.net/blog/ruoyiqing/39341191

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved