js事件監聽

/*
事件監聽器html

addEventListener()
removeEventListener()
node

傳統事件綁定:
一、重複添加會,後添加的後覆蓋前面的。
*/瀏覽器

示例代碼中的html結構:函數

<body>    
    <button id = "btn1">按鈕</button>
</body>

//代碼示spa

            window.onload = function(){
                //傳統事件綁定
                var oBtn = document.getElementById('btn1');
                oBtn.onclick = function(){
                    alert('hello world');
                }

                //此處省略100行代碼
                
                oBtn.onclick = function(){
                    alert('world hello');
                }
            }

 

 

 

/*上面的結果是下面的oBtn.onclick事件會覆蓋到上面的oBtn.onclick事件
最後頁面上輸出的結果也是 world hello;*/code

//怎麼才能讓他兩個事件都存在呢?這裏咱們要用到事件監聽器
//addEventListener()
//removeEventListener()
/*
事件監聽器htm

addEventListener()
格式:
node.addEventListener(事件類型, 函數_要執行的匿名函數, false)
第三參數:false 事件冒泡 true 事件捕獲對象


removeEventListener()
格式:
node.removeEventListener(事件類型, 函數名);
blog

傳統事件綁定:
一、重複添加會,後添加的後覆蓋前面的。
*/


//代碼示例:事件

 

 

        
            window.onload = function(){
                //事件監聽綁定
                var oBtn = document.getElementById('btn1');
                oBtn.addEventListener ('click', function(){
                    alert('hello world');                    
                }, false)
                

                //此處省略100行代碼
                //再添加一個監聽事件用來監聽click 點擊
                oBtn.addEventListener ('click', function(){
                    alert('world hello');
                    
                }, false)
            }        

 

 

 

 


//這樣就不會發生重疊現象,點擊按鈕時會 彈出 hello world 和 world hello;

//我再來看一下移除事件監聽 removeEventListener,首先先看一下傳統的移除事件

//咱們修改html結構以下

 

<body>    
    <button>添加事件</button>
    <button>按鈕</button>
    <button>刪除事件</button>
</body>

//具體演示代碼以下

 

 

            window.onload = function(){
                //獲取3個button按鈕元素節點
                var aBtns = document.getElementsByTagName('button');
                //給第二個按鈕添加一個傳統的點擊事件
                aBtns[1].onclick = function(){
                    alert('原有的事件');
                }
                //當點擊第一個按鈕的時候再給第二個按鈕添加一個傳統的點擊事件
                aBtns[0].onclick = function(){
                    aBtns[1].onclick = show;
                }
                //點擊第三個按鈕的時候,將第二按鈕點擊事件賦值成 null  即爲空
                aBtns[2].onclick = function(){
                    aBtns[1].onclick = null;
                }
                
                //方便演示的函數
                function show(){
                    alert('hello world');
                }                
                            
                
            }        

 

 

//在演示過程當中,咱們能夠看出每次都是相互覆蓋的關係,剛開始的時候 點擊第二個按鈕 會彈出 原有的事件, 咱們再去點一下 第一個按鈕 後
//再回來點 第二個按鈕 這時的內容 就變成了 hello world 說明第二次添加的事件 把原有的事件就覆蓋了,點擊 第三個按鈕 也是一樣的道理
//所在 再次點擊 第二個時 就什麼也不彈出來。


//咱們再來看一下移除事件監聽 removeEventListener與上面的區別,

//代碼以下

 

            window.onload = function(){
                var aBtns = document.getElementsByTagName('button');

                aBtns[1].addEventListener('click', function(){
                    alert('原有的事件');
                }, false);

                aBtns[0].onclick = function(){
                    aBtns[1].addEventListener('click', show, false);
                }

                aBtns[2].onclick = function(){
                    aBtns[1].removeEventListener("click", show);
                }
            }

            function show(){
                alert('hello world');
            }

 

 

 

//能夠看出用事件監聽的方法能夠不覆蓋原有的事件,還能自由可控制,移除添加的事件。

/*可是這種方法 是ie9 之後纔出來的,因此ie9之前不兼容,可是他給咱們了兩個功能同樣的函數,

IE下
attachEvent()
格式
只有兩個參數
attachEvent(on事件類型, 函數_要執行的匿名函數或函數)
detachEvent(on事件類型, 函數_要取消的匿名函數或函數)*/


/*因此咱們封裝兼容全部瀏覽器的 監聽事件方法(函數)*/

 

 

        /*---------封裝兼容全部瀏覽器的 監聽事件方法(函數--------------*/
            //封裝添加監聽事件的函數 
            //    形參說明
            //    obj  是要添加的元素節點對象   
            //    event 是事件類型(是click仍是mousedown等)
            // func  是事件觸發後要執行的函數
            function addEvent(obj, eventType, func){
                if(obj.addEventListener){
                    obj.addEventListener(eventType, func, false);
                }else{
                    obj.attachEvent("on" + eventType, func);
                }
            }
            //封裝移除監聽事件的函數
            function removeEvent(obj, eventType, func){
                if(obj.removeEventListener){
                    obj.removeEventListener(eventType, func);
                }else{
                    obj.detachEvent("on" + eventType, func);
                }
            }        
        
        /*---------封裝兼容全部瀏覽器的 監聽事件方法(函數)end--------------*/        

/*總結
傳統事件綁定能夠知足咱們對於事件綁定的大部分需求。

事件監聽器能夠補充咱們傳統事件綁定不能知足的更高的要求。

*/

相關文章
相關標籤/搜索