天天看點

JavaScript 為元素綁定和解綁事件addEventListener() 和 attachEvent() 的總結:為元素解綁事件:相容代碼

為元素綁定事件:

1、對象.帶on的事件類型 = 事件處理函數;    隻能綁定一個事件處理函數,後面的會覆寫前面的。

2、對象.addEventListener("沒有on的事件類型", 事件處理函數, false); ————谷歌、火狐、IE11支援,IE8不支援

       可以綁定多個事件處理函數。

3、對象.attachEvent("帶on的事件類型", 事件處理函數); ————谷歌、火狐、IE11不支援,IE8支援

       可以綁定多個事件處理函數。

事件處理函數————是函數,可以是命名函數,也可以是匿名函數,但是在有對應的解綁事件的時候要用命名函數。

為同一個元素綁定多個相同的事件

addEventListener

<!DOCTYPE html>
<html >
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<input type="button" value="按鈕" id="btn"/>
<script>
    var btn = document.getElementById("btn");
    btn.addEventListener("click", function(){
        console.log("我是addEventListener事件一");
    }, false);
    btn.addEventListener("click", function(){
        console.log("我是addEventListener事件二");
    }, false);
    btn.addEventListener("click", function(){
        console.log("我是addEventListener事件三");
    }, false);
    btn.addEventListener("click", function(){
        console.log("我是addEventListener事件四");
    }, false);
</script>
</body>
</html>
           

attachEvent

<!DOCTYPE html>
<html >
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<input type="button" value="按鈕" id="btn"/>
<script>
    var btn = document.getElementById("btn");
    btn.attachEvent("onclick", function(){
        console.log("我是attachEvent事件一");
    });
    btn.attachEvent("onclick", function(){
        console.log("我是attachEvent事件二");
    });
    btn.attachEvent("onclick", function(){
        console.log("我是attachEvent事件三");
    });
    btn.attachEvent("onclick", function(){
        console.log("我是attachEvent事件四");
    });
</script>
</body>
</html>
           

addEventListener() 和 attachEvent() 的總結:

相同點:都可以為元素綁定事件

不同點:

1、方法名字不一樣。

2、參數個數不一樣,addEventListener有三個參數,attachEvent有兩個參數。

3、addEventListener參數中的事件類型(事件的名字)沒有on,attachEvent參數中的事件類型(事件的名字)有on。

4、addEventListener 谷歌、火狐、IE11支援,IE8不支援,attachEvent 谷歌、火狐、IE11不支援,IE8支援。

5、this不同,addEventListener 中的this是目前綁定事件的對象,但attachEvent 中的this是window。

為元素解綁事件:

要注意,用什麼方法綁定的事件,就用什麼方法解綁。

方法一:通過DOM元素的onclick等事件屬性,為元素綁定事件。

綁定事件:對象.on事件名字=事件處理函數

解綁事件:對象.on事件名字=null;

<!DOCTYPE html>
<html >
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<button id="btn1">綁定事件</button>
<button id="btn2">解綁事件</button>
<script>
    var btn1 = document.getElementById("btn1");
    var btn2 = document.getElementById("btn2");
    //綁定事件
    btn1.onclick = function(){
        console.log("綁定了onclick事件");
    };
    btn2.onclick = function(){
        //解綁事件
        btn1.onclick = null;
    };
</script>
</body>
</html>
           

方法二:addEventListener  和  removeEventListener

綁定事件:對象.addEventListener("沒有on的事件類型", 命名函數, false);

解綁事件:對象.removeEventListener("沒有on的事件類型", 函數名字, false);

<!DOCTYPE html>
<html >
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<button id="btn1">綁定事件</button>
<button id="btn2">解綁事件</button>
<script>
    var btn1 = document.getElementById("btn1");
    var btn2 = document.getElementById("btn2");
    function f1(){
        console.log("事件一");
    }
    function f2(){
        console.log("事件二");
    }
    function f3(){
        console.log("事件三");
    }
    //綁定事件
    btn1.addEventListener("click", f1, false);
    btn1.addEventListener("click", f2, false);
    btn1.addEventListener("click", f3, false);
    //點選第二個按鈕,解綁事件
    btn2.onclick = function(){
        //有解綁事件的,需要在綁定事件的時候使用命名函數
        btn1.removeEventListener("click", f2, false);
    };
</script>
</body>
</html>
           

方法三:attachEvent 和 detachEvent

綁定事件:對象.attachEvent("on事件類型", 命名函數 );

解綁事件:對象.detachEvent("on事件類型", 函數名字);

<!DOCTYPE html>
<html >
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<button id="btn1">綁定事件</button>
<button id="btn2">解綁事件</button>
<script>
    var btn1 = document.getElementById("btn1");
    var btn2 = document.getElementById("btn2");
    function f1(){
        console.log("事件一");
    }
    function f2(){
        console.log("事件二");
    }
    function f3(){
        console.log("事件三");
    }
    //綁定事件
    btn1.attachEvent("onclick", f1);
    btn1.attachEvent("onclick", f2);
    btn1.attachEvent("onclick", f3);
    //點選第二個按鈕,解綁事件
    btn2.onclick = function(){
        //有解綁事件的,需要在綁定事件的時候使用命名函數
        btn1.detachEvent("onclick", f2);
    };
</script>
</body>
</html>
           

相容代碼

綁定事件:為任意元素綁定任意事件

//為任意元素綁定任意事件,參數:元素,不帶on的事件類型,事件處理函數
    function addEvent(element, type, fn){
        if(element.addEventListener){
            element.addEventListener(type, fn, false);
        }else if(element.attachEvent){
            element.attachEvent("on"+type, fn);
        }else{
            element["on"+type] = fn;
        }
    }
           

解綁事件

//為任意元素解綁任意事件,參數:元素,不帶on的事件類型,事件處理函數名字
    function removeEvent(element, type, fnName){
        if(element.removeEventListener){
            element.removeEventListener(type, fnName, false);
        }else if(element.detachEvent){
            element.detachEvent("on"+type, fnName);
        }else{
            element["on"+type] = null;
        }
    }
           

案例:

<!DOCTYPE html>
<html >
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<button id="btn1">綁定事件</button>
<button id="btn2">解綁事件</button>
<script>
    var btn1 = document.getElementById("btn1");
    var btn2 = document.getElementById("btn2");
    function f1(){
        console.log("事件一");
    }
    function f2(){
        console.log("事件二");
    }
    function f3(){
        console.log("事件三");
    }
    //綁定事件
    addEvent(btn1, "click", f1);
    addEvent(btn1, "click", f2);
    addEvent(btn1, "click", f3);
    //點選第二個按鈕,解綁事件
    btn2.onclick = function(){
        //有解綁事件的,需要在綁定事件的時候使用命名函數
        removeEvent(btn1, "click", f2);
    };


    //為任意元素綁定任意事件,參數:元素,不帶on的事件類型,事件處理函數
    function addEvent(element, type, fn){
        if(element.addEventListener){
            element.addEventListener(type, fn, false);
        }else if(element.attachEvent){
            element.attachEvent("on"+type, fn);
        }else{
            element["on"+type] = fn;
        }
    }

    //為任意元素解綁任意事件,參數:元素,不帶on的事件類型,事件處理函數名字
    function removeEvent(element, type, fnName){
        if(element.removeEventListener){
            element.removeEventListener(type, fnName, false);
        }else if(element.detachEvent){
            element.detachEvent("on"+type, fnName);
        }else{
            element["on"+type] = null;
        }
    }
</script>
</body>
</html>
           

任何浏覽器都支援該相容代碼。

繼續閱讀