一" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

18143453325 在線咨詢 在線咨詢
18143453325 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)絡(luò)營銷 > JavaScript事件處理程序的3種方式

JavaScript事件處理程序的3種方式

時間:2022-05-29 15:03:01 | 來源:網(wǎng)絡(luò)營銷

時間:2022-05-29 15:03:01 來源:網(wǎng)絡(luò)營銷

最近這段時間因為每天要修改網(wǎng)站,為網(wǎng)站做特效,所以看了很多的js接觸事件,自己只會使用一小部分,有時用的時候也比較混亂,現(xiàn)在系統(tǒng)的整理了一下,首先跟大家在億企邦上跟大家分享的是JavaScript事件處理程序的3種方式:

一、什么是JavaScript事件?

事件(Event)是JavaScript應(yīng)用跳動的心臟,也是把所有東西粘在一起的膠水,當我們與瀏覽器中Web頁面進行某些類型的交互時,事件就發(fā)生了。

事件可能是用戶在某些內(nèi)容上的點擊、鼠標經(jīng)過某個特定元素或按下鍵盤上的某些按鍵,事件還可能是Web瀏覽器中發(fā)生的事情,比如說某個Web頁面加載完成,或者是用戶滾動窗口或改變窗口大小。

說白了,事件是文檔或瀏覽器中發(fā)生的特定交互瞬間!

通過使用JavaScript,你可以監(jiān)聽特定事件的發(fā)生,并規(guī)定讓某些事件發(fā)生以對這些事件做出響應(yīng)(具體代碼大家可以通過億企邦《JS基礎(chǔ)知識:Javascript事件觸發(fā)列表》的表格來查詢)。

二、事件流

事件流就是描述了頁面中接受事件的順序,在瀏覽器發(fā)展的初期,兩大瀏覽器廠商IE和Netscape互掐,出現(xiàn)了一個坑爹的情況,那就是他們對事件流的解釋出現(xiàn)了兩中截然相反的定義。也就是我們所熟悉的:IE的事件冒泡,Netscape的事件捕獲。先來一張圖,簡要的看下結(jié)構(gòu):

1、事件冒泡

事件冒泡即事件最開始由最具體的元素(文檔中嵌套層次最深的那個節(jié)點)接收,然后逐級向上傳播至最不具體的節(jié)點(文檔)。拿上面的圖來說明,就是當點擊text部分時,先由text處的元素接收,然后逐級傳播至window,即執(zhí)行6-7-8-9-10的過程。

2、事件捕獲

事件捕獲即事件最早由不太具體的節(jié)點接收,而最具體的節(jié)點最后接收到事件。同理,在上面的模型中,就是點擊text部分時,先由window接收,然后逐級傳播至text元素,即執(zhí)行1-2-3-4-5的過程。

具體在代碼中怎樣表現(xiàn)呢?后面億企邦會給出代碼的介紹,大家莫急!

三、Javascript事件處理程序的3種方式

產(chǎn)生了事件,我們就要去處理他,據(jù)億企邦了解Javascript事件處理程序主要有3種方式:

1、HTML事件處理程序

即我們直接在HTML代碼中添加事件處理程序,如下面這段代碼:

<input id="btn1" value="按鈕" type="button" onclick="showmsg();">
  <script>
   function showmsg(){
   alert("HTML添加事件處理");
   }
  </script>

從上面的代碼中我們可以看出,事件處理是直接嵌套在元素里頭的,這樣有一個毛?。壕褪莌tml代碼和js的耦合性太強,如果哪一天我想要改變js中showmsg,那么我不但要再js中修改,我還需要到html中修改,一兩處的修改我們能接受,但是當你的代碼達到萬行級別的時候,修改起來就需要勞民傷財了,所以,這個方式我們并不推薦使用。

2、DOM0級事件處理程序

即為指定對象添加事件處理,看下面的一段代碼

<input id="btn2" value="按鈕" type="button">
  <script>
    var btn2= document.getElementById("btn2");
   btn2.onclick=function(){
      alert("DOM0級添加事件處理");
    }
    btn.onclick=null;//如果想要刪除btn2的點擊事件,將其置為null即可
  </script>

從上面的代碼中,我們能看出,相對于HTML事件處理程序,DOM0級事件,html代碼和js代碼的耦合性已經(jīng)大大降低。但是,聰明的程序員還是不太滿足,期望尋找更簡便的處理方式,下面億企邦就來說說第三種處理方法。

3、DOM2級事件處理程序

DOM2也是對特定的對象添加事件處理程序(具體可查看億企邦的《JavaScript對象屬性的基礎(chǔ)教程指南》相關(guān)介紹),但是主要涉及到兩個方法,用于處理指定和刪除事件處理程序的操作:addEventListener()和 removeEventListener()。

它們都接收三個參數(shù):要處理的事件名、作為事件處理程序的函數(shù)和一個布爾值(是否在捕獲階段處理事件),看下面的一段代碼:

<input id="btn3" value="按鈕" type="button">
  <script>
   var btn3=document.getElementById("btn3");
   btn3.addEventListener("click",showmsg,false);//這里我們把最后一個值置為false,即不在捕獲階段處理,一般來說冒泡處理在各瀏覽器中兼容性較好
   function showmsg(){
   alert("DOM2級添加事件處理程序");
   }
   btn3.removeEventListener("click",showmsg,false);//如果想要把這個事件刪除,只需要傳入同樣的參數(shù)即可
  </script>

這里我們可以看到,在添加刪除事件處理的時候,最后一種方法更直接,也最簡便。但是億企邦提醒大家需要注意的是,在刪除事件處理的時候,傳入的參數(shù)一定要跟之前的參數(shù)一致,否則刪除會失效!

四、事件冒泡和事件捕獲的流程與區(qū)別

說到這里,億企邦再給大家來一點代碼來說明下事件冒泡和事件捕獲的流程,同時也讓大家能看出二者的區(qū)別:

<!doctype html>
  <html lang="en">
  <head>
   <meta charset="UTF-8">
   <title>Document</title>
   <style>
   #p{width:400px;height:200px;border:1px solid black;}
   #c{width:200px;height:100px;border:1px solid red;}
   </style>
  </head>
  <body>
   <div id="p">
   i am www.mahaixiang.cn
   <div id="c">i like www.mahaixiang.cn</div>
   </div>
   <script>
   var p = document.getElementById('p');
     var c = document.getElementById('c');
   c.addEventListener('click', function () {
   alert('子節(jié)點捕獲')
   }, true);
   c.addEventListener('click', function () {
   alert('子節(jié)點冒泡')
   }, false);
   p.addEventListener('click', function () {
   alert('父節(jié)點捕獲')
   }, true);
   p.addEventListener('click', function () {
   alert('父節(jié)點冒泡')
   }, false);
   </script>
  </body>
  </html>

運行上面的代碼,點擊子元素的時候,我們會發(fā)現(xiàn),執(zhí)行的先后順序是:父節(jié)點捕獲--子節(jié)點捕獲--子節(jié)點冒泡--父節(jié)點冒泡。從這個例子中,大家也就明白了,另外,DOM2級事件規(guī)定事件包括三個階段:

1、事件捕獲階段;

2、處于目標階段;

3、事件冒泡階段。

首先是捕獲,然后處于目標階段(即來到事件的發(fā)出位置),最后才是冒泡,

不科學(xué)的是,居然木有DOM1級事件處理程序,大家注意下,別鬧出笑話了!

億企邦補充:IE事件處理程序也對應(yīng)有兩個方法:attachEvent()添加事件,detachEvent()刪除事件,這兩個方法接收相同的兩個參數(shù):事件處理程序名稱與事件處理函數(shù)。

這里為什么沒有布爾值呢?因為ie8以及更早的版本只支持事件冒泡,所以最后一個參數(shù)默認的相當于false來處理!(支持IE事件處理程序的瀏覽器有IE,opera)

五、事件處理程序的瀏覽器兼容性

既然不同的瀏覽器對事件處理程序有這自己不同的支持,那么,我們在開發(fā)中,豈不是每次使用事件處理程序時都要對不同的瀏覽器做一次兼容?這里億企邦封裝一個兼容方法,以后在事件處理的時候,直接調(diào)用即可,看下面一段代碼:

<!doctype html>
  <html lang="en">
  <head>
   <meta charset="UTF-8">
   <title>Document</title>
  </head>
  <body>
  <input id="btn" type="button" value="按鈕">
   <script>
   var eventHandler={
   addHandler:function(element,type,func){
   if(element.addEventListener){
   element.addEventListener(type,func,false);
   }else if(element.detachEvent){
   element.attachEvent('on'+type,func);
   }else{
   element['on'+type]=func;
   }
   },
   removerHandler:function(element,type,func){
   if(element.removeEventListener){
   element.removeEventListener(type,func,false);
   }else if(element.detachEvent){
   element.detachEvent('on'+type,func);
   }else{
   element['on'+type]=null;
   }
   }
   }
   function showmsg(){
   alert("hello");
   }
   var btn=document.getElementById("btn");
   eventHandler.addHandler(btn,"click",showmsg);
   //eventHandler.removerHandler(btn,"click",showmsg);//去掉事件處理
   </script>
  </body>
  </html>

上面的代碼在ie和其他瀏覽器中都能正常處理事件,以后如果需要使用兼容性的操作,都可以直接調(diào)用這段代碼。

億企邦點評:

事件對象是用來記錄一些事件發(fā)生時的相關(guān)信息的對象,但事件對象只有事件發(fā)生時才會產(chǎn)生,并且只能是事件處理函數(shù)內(nèi)部訪問,在所有事件處理函數(shù)運行結(jié)束后,事件對象就被銷毀!

關(guān)鍵詞:方式,程序,處理

74
73
25
news

版權(quán)所有? 億企邦 1997-2022 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關(guān)閉