事件(一)

一.事件綁定#

要想讓JavaScript 對(duì)用戶的操作作出響應(yīng),首先要對(duì) DOM 元素綁定事件處理函數(shù)。所謂事件處理函數(shù),就是處理用戶操作的函數(shù),不同的操作對(duì)應(yīng)不同的名稱。
在JavaScript中,有三種常用的綁定事件的方法:
· 在DOM元素中直接綁定;
· 在JavaScript代碼中綁定;
· 綁定事件監(jiān)聽函數(shù)。

1.在DOM中直接綁定事件
我們可以在
DOM元素上綁定onclick、onmouseover、onmouseout、onmousedown、onmouseup、ondblclick、onkeydown、onkeypress、onkeyup等。好多不一一列出了。如果想知道更多事件類型請(qǐng)查看, DOM事件 。

<input type="button" value="click me" onclick="hello()"> 
<script> 
        function hello(){ alert("hello world!"); }
 </script> 

2.在JavaScript代碼中綁定事件
在JavaScript代碼中(即 script 標(biāo)簽內(nèi))綁定事件可以使JavaScript代碼與HTML標(biāo)簽分離,文檔結(jié)構(gòu)清晰,便于管理和開發(fā)。

<input type="button" value="click me" id="btn"> 
<script>
       document.getElementById(**"btn"**).onclick = function(){
           alert("hello world!"); }
       </scrip*> 

3.使用事件監(jiān)聽綁定事件
綁定事件的另一種方法是用
addEventListener() 或 attachEvent() 來綁定事件監(jiān)聽函數(shù)。下面詳細(xì)介紹,事件監(jiān)聽。

二.事件監(jiān)聽#

關(guān)于事件監(jiān)聽,
W3C規(guī)范中定義了3個(gè)事件階段,依次是捕獲階段、目標(biāo)階段、冒泡階段。
起初Netscape制定了JavaScript的一套事件驅(qū)動(dòng)機(jī)制(即事件捕獲)。隨即IE也推出了自己的一套事件驅(qū)動(dòng)機(jī)制(即事件冒泡)。最后W3C規(guī)范了兩種事件機(jī)制,分為捕獲階段、目標(biāo)階段、冒泡階段。IE8以前IE一直堅(jiān)持自己的事件機(jī)制(前端人員一直頭痛的兼容性問題),IE9以后IE也支持了W3C規(guī)范。
W3C規(guī)范
語法:
element.addEventListener(event, function, useCapture)
event : (必需)事件名,支持所有 [DOM事件]
function:(必需)指定要事件觸發(fā)時(shí)執(zhí)行的函數(shù)。
useCapture:(可選)指定事件是否在捕獲或冒泡階段執(zhí)行。true,捕獲。false,冒泡。默認(rèn)false。
注:IE8以下不支持。


<input type="button" value="click me" id="btn1">
 <script>
       document.getElementById("btn1").addEventListener("click",hello);   
        function hello(){ alert("hello world!"); } 
</script> 

IE標(biāo)準(zhǔn)
語法:
element.attachEvent(event, function)
event:(必需)事件類型。需加“on“,例如:onclick。
function:(必需)指定要事件觸發(fā)時(shí)執(zhí)行的函數(shù)。


<input type="button" value="click me" id="btn2"> 
<script> 
        document.getElementById("btn2").attachEvent("onclick",hello);     
        function hello(){ alert("hello world!"); } 
</script> 

事件監(jiān)聽的優(yōu)點(diǎn)

1、可以綁定多個(gè)事件。

<input type="button" value="click me" id="btn3"> 
<script> 
      var btn3 = document.getElementById("btn3"); 
      btn3.onclick =  function(){ alert("hello 1"); //不執(zhí)行}
      btn3.onclick = function(){ alert("hello 2"); *//執(zhí)行} 
</script> 

常規(guī)的事件綁定只執(zhí)行最后綁定的事件。
2、可以解除相應(yīng)的綁定

<input type="button" value="click me" id="btn5">
 <script>
      var btn5 = document.getElementById("btn5");     
      btn5.addEventListener("click",hello1);//執(zhí)行了
      btn5.addEventListener("click",hello2);//不執(zhí)行
      btn5.removeEventListener("click",hello2); function hello1(){      
      alert("hello 1"); } function hello2(){ alert("hello 2"); }
 </script> 

封裝事件監(jiān)聽


    <input type="button" value="click me" id="btn5*> //綁定監(jiān)聽事件
    function addEventHandler(target,type,fn){
         if(target.addEventListener){ 
                target.addEventListener(type,fn); 
         }else{
                target.attachEvent("on"+type,fn);
         } 
     } //移除監(jiān)聽事件
     function removeEventHandler(target,type,fn){       
           if(target.removeEventListener){       
                 target.removeEventListener(type,fn); 
           }else{
                 target.detachEvent("on"+type,fn);
           } 
      } //測(cè)試
       var btn5 = document.getElementById("btn5");     
       addEventHandler(btn5,"click",hello1);//添加事件
       hello1
       addEventHandler(btn5,"click",hello2);//添加事件
       hello2
       removeEventHandler(btn5,"click",hello1);//移除事件
       hello1
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 以下文章為轉(zhuǎn)載,對(duì)理解JavaScript中的事件處理機(jī)制很有幫助,淺顯易懂,特分享于此。 什么是事件? 事件(E...
    jxyjxy閱讀 3,162評(píng)論 1 10
  • 事件流 事件流描述的是從頁面中接受事件的順序,在IE中的事件流是事件冒泡,在Netscape的事件流是事件捕獲流。...
    FeRookie閱讀 327評(píng)論 0 4
  • 聲明:本文來源于http://www.webzsky.com/?p=731我只是在這里作為自己的學(xué)習(xí)筆記整理一下(...
    angryyan閱讀 7,239評(píng)論 1 6
  • 疏風(fēng)后,柳嫩初。 枝枝葉葉桃花渡,花花草草凝垂露,飄飄蕩蕩陽臺(tái)住。 尊前持酒莫留咱,留得幾寸斜陽暮。
    陶然忘機(jī)閱讀 212評(píng)論 2 0
  • 周末,去剪了個(gè)頭,確切的說是做!發(fā)!型! 想要自己有些改變,不管是心態(tài)還是狀態(tài),那么好,從頭開始吧!去年底,無意間...
    書苓閱讀 275評(píng)論 0 0

友情鏈接更多精彩內(nèi)容