js基礎---事件的綁定(綁定多個相同事件 addEventListener / attachEvent)


<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script type="text/javascript"> window.onload = function(){ /* * 點擊按鈕以后彈出一個內容 */
                //獲取按鈕對象
                var btn01 = document.getElementById("btn01"); /* * 使用 對象.事件 = 函數 的形式綁定響應函數, * 它只能同時為一個元素的一個事件綁定一個響應函數, * 不能綁定多個,如果綁定了多個,則后邊會覆蓋掉前邊的 */
                
                //為btn01綁定一個單擊響應函數
                /*btn01.onclick = function(){ alert(1); };*/
                
                //為btn01綁定第二個響應函數
                /*btn01.onclick = function(){ alert(2); };*/
                
                /* * addEventListener() * - 通過這個方法也可以為元素綁定響應函數 * - 參數: * 1.事件的字符串,不要on * 2.回調函數,當事件觸發時該函數會被調用 * 3.是否在捕獲階段觸發事件,需要一個布爾值,一般都傳false * * 使用addEventListener()可以同時為一個元素的相同事件同時綁定多個響應函數, * 這樣當事件被觸發時,響應函數將會按照函數的綁定順序執行 * * 這個方法不支持IE8及以下的瀏覽器 */
                /*btn01.addEventListener("click",function(){ alert(1); },false); btn01.addEventListener("click",function(){ alert(2); },false); btn01.addEventListener("click",function(){ alert(3); },false);*/
                
                /* * attachEvent() * - 在IE8中可以使用attachEvent()來綁定事件 * - 參數: * 1.事件的字符串,要on * 2.回調函數 * * - 這個方法也可以同時為一個事件綁定多個處理函數, * 不同的是它是后綁定先執行,執行順序和addEventListener()相反 */
                /*btn01.attachEvent("onclick",function(){ alert(1); }); btn01.attachEvent("onclick",function(){ alert(2); }); btn01.attachEvent("onclick",function(){ alert(3); });*/
                
                /*btn01.addEventListener("click",function(){ alert(this); },false);*/
                
                /*btn01.attachEvent("onclick",function(){ alert(this); });*/ bind(btn01 , "click" , function(){ alert(this); }); }; //定義一個函數,用來為指定元素綁定響應函數
            /* * addEventListener()中的this,是綁定事件的對象 * attachEvent()中的this,是window * 需要統一兩個方法this */
            /* * 參數: * obj 要綁定事件的對象 * eventStr 事件的字符串(不要on) * callback 回調函數 */
            function bind(obj , eventStr , callback){ if(obj.addEventListener){ //大部分瀏覽器兼容的方式
 obj.addEventListener(eventStr , callback , false); }else{ /* * this是誰由調用方式決定 * callback.call(obj) */
                    //IE8及以下
 obj.attachEvent("on"+eventStr , function(){ //在匿名函數中調用回調函數
 callback.call(obj); }); } } </script>
    </head>
    <body>
        
        <button id="btn01">點我一下</button>
    </body>
</html>

 

 

            window.onload = function(){
                var btn = document.querySelector("button");
                bd(btn,"click",function(){
                    alert("點擊1")
                })
                bd(btn,"click",function(){
                    alert("點擊2")
                })
                bd(btn,"click",function(){
                    alert("點擊3")
                })
            }
            
            
            // 正常瀏覽器obj.addEventListener 與 IE8---obj.attachEvent 兼容
            function bd(obj,str,callback){
                if(obj.addEventListener){
                    obj.addEventListener(str,callback,false);
                }else{
                    // 在回調函數外添加一層回調函數就可以自己通過call的方式制定this指向, attachEvent默認指向window
                    obj.attachEvent("on"+str,function(){
                        callback.call(obj);
                    })
                }
            }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM