91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

js事件處理程序學習與總結

發布時間:2020-06-13 20:36:00 來源:網絡 閱讀:505 作者:蝸牛oscersong 欄目:開發技術

1html事件處理程序,使用一個與相應事件處理程序同名的HTML特性來指定,可以定義事件處理程序是可以包含要執行的具體動作,也可以調用頁面其他地方定義的腳本函數,但這種方法就是把javascripthtml混寫,一般開發,不建議使用,比如:

      <input type=button value=提交 onsumit=alert(提交了?)>

2javascript指定事件處理程序

            這種方法,必須先取得一個操作對象的引用。

      1DOM0級事件處理程序

              例如:

          var spanobj = document.querySelector('span');

          spanobj.onclick=function(){

          alert("span元素被選中");

        } 

      spanobj.onclick=null;刪除事件處理程序,再單擊都不會有效果啦。

通過文檔對象取得了一個標簽元素的引用,然后對它指定事件處理程序,這樣的一種形式就是DOM0事件處理程序。以這種方式添加的事件處理程序會在事件流的冒泡階段被處理。

      此方法優點:容易理解,對初學者學起來比較好上手,還有就是事件處理程序是在元素的作用域中運行的,程序中的this是引用的當前元素

           缺點:如果這些代碼在頁面中位于span元素的后面,就有可能一段時間內怎么單擊都沒有反應,而且也不能夠給給一個對象添加多個事件處理程序,因為后面的會把前面的覆蓋。

   2)DOM2級事件處理程序

        a) addEventListener() 處理指定事件處理程序的操作;

        用法:elemet.addEventListener(<event-name>, <callback>, <use-capture>)此函數具有三個參數,第一個參數是:要處理的事件名,比如click,submit...,第二個參數是:事件處理程序的函數,第三個參數是:布爾值(true/falsetrue,表示在捕獲階段調用事件處理函數,false,表示在冒泡階段調用事件處理程序;比如:以下代碼;

    var spanobj = document.querySelector('span');

    spanobj.addEventListener(click,function(){

              alert("span元素被選中");

 

    },false);

     優點:可以同時給一個對象添加多個事件處理程序,并且這些事件處理程序會按照添加的順序觸發。比如:

       spanobj.addEventListener("click",function(){

              alert("span元素被選中");

 

        },false);

         spanobj.addEventListener("click",function(){

              alert("span元素被選中1111");

 

       },false);

會依次彈出“span元素被選中”,"span元素被選中1111"

        b)removeEventListener(),刪除事件處理程序的操作;

 用法:element.removeEventListener(<event-name>, <callback>, <use-capture>);

專門用來移除addEventListener()添加的事件處理程序,移除時的參數與添加時的參數相同,那么就需要保留回調函數的句柄,因此,也就對于匿名函數,無法移除,我們不能使用匿名函數作為回調函數。

例如:  添加事件處理程序:

       var spanobj = document.querySelector('span');

         spanobj.addEventListener("click",function(){//這個回調函數是匿名的

              alert("span元素被選中1111");

         },false);

        移除事件處理程序(1

        spanobj.removeEventListener(click,function(){//這種是不起作用的,因為回調函數是匿名的

        alert("span元素被選中1111");

        },false);  

        移除事件處理程序(2)  

                 var spanobj = document.querySelector('span');

                 var  spanhander=function(){ alert("span元素被選中1111"); };//將函數附值給一個對象。

                spanobj.addEventListener(click,spanhander,false);//這個函數的對象作為參數。

                spanobj.removeEventListener(click,spanhander,false);//此時就可以移除事件處理程序了,

 

3)Ie事件處理程序 

     a)attachEvent();添加事件處理程序;

      用法:attachEvent(<on+event-name>, <callback>),這個函數只有兩個參數,第一個參數是:要處理的事件名稱以“on”為前綴,第二參數是:處理程序的函數。因為iE事件模型不支持事件捕獲,所以沒有第三個布爾值的參數。

      特點:類似與addEventListener(),同樣允許相同的事件處理程序注冊多次,不過這些事件處理程序不是以添加的順序執行,而是以相反的順序被觸發。而且與DOM0級方法的主要區別是,事件處理程序的作用域上,在使用DOM0級的情況下,事件處理程序會在其所屬元素的作用域內進行,而在IE處理程序下,事件處理程序作用域會在全局作用域中進行,程序中的this==window

   b)detachEvent();移除事件處理程序;

     用法:detachEvent(<on+event-name>, <callback>) ,也是使用attachEvent添加的事件必須由detachEvent事件來移除,同樣要必須提供相同的參數,匿名函數將不能被移除,例子看上面的removeEventListener()事件。

3總結:一般事件處理程序都會考慮到這三方面,盡可能全寫到如圖(3)添加事件處理程序如下這些會在后期的學習中,跨瀏覽器添加事件很有幫助,根據后期的學習,會繼續完善下面的代碼,使之以后用起來比較方便:

js事件處理程序學習與總結 

   對應上面的添加事件,來進行移除事件,這里的移除事件是與添加事件一一對應的,            

      

js事件處理程序學習與總結 

  最后,修改上面的實現跨瀏覽器的事件處理程序:

var EventUtil = { 
addHandler: function(element, type, handler){ // 該方法接受3個參數:要操作的元素,事件名稱和事件處理程序函數 
if (element.addEventListener){ //檢查傳入的元素是否存在DOM2級方法 
element.addEventListener(type, handler, false); // 若存在,則使用該方法 
} 
else if (element.addEvent){ // 如果存在的是IE的方法 
element.attachEvent("on" + type, handler); //則使用IE的方法,注意,這里的事件類型必須加上"on"前綴。 
}
 else { // 最后一種可能是使用DOM0級 
element["on" + type] = hander; 
} 
}, 

removeHandler: function(element, type, handler){ // 該方法是刪除之前添加的事件處理程序 
if (element.removeEventListener){ //檢查傳入的元素是否存在DOM2級方法 
element.removeEventListener(type, handler, false); // 若存在,則使用該方法 
} 
else if (element.detachEvent){ // 如果存在的是IE的方法 
element.detachEvent("on" + type, handler); //則使用IE的方法,注意,這里的事件類型必須加上"on"前綴。 
}
 else { // 最后一種可能是使用DOM0及方法(在現代瀏覽器中,應該不會執行這里的代碼) 
element["on" + type] = null; 
} 
} 
}; 
//可以向下面這樣來使用:
 var btn =document.getElementById("mybtn"); 
var hander= function(){ 
alert("clicked"); 
}; 
//這里省略了部分代碼 
EventUtil.addHandler(btn,"click",hander); 
//這里省略了部分代碼 
EventUtil.removeHandler(btn,"click",hander); //移除之前添加的事件處理程序


       

  


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永靖县| 阆中市| 当阳市| 家居| 敖汉旗| 东光县| 镇坪县| 武宁县| 灵璧县| 和田县| 高邮市| 金川县| 淄博市| 栾城县| 三台县| 宾川县| 同德县| 临潭县| 洛隆县| 贞丰县| 三都| 尚志市| 鄂伦春自治旗| 沂南县| 佛山市| 龙山县| 蚌埠市| 天镇县| 凉山| 上栗县| 怀来县| 盘山县| 怀仁县| 华亭县| 象山县| 玛沁县| 安阳市| 泽普县| 拜泉县| 揭阳市| 呈贡县|