js事件對(duì)象

什么是事件對(duì)象?

在觸發(fā)DOM上的事件時(shí)都會(huì)產(chǎn)生一個(gè)對(duì)象

一、(非IE)事件對(duì)象event#

1、DOM中的事件對(duì)象

(1)、type屬性 用于獲取事件類型
(2)、target屬性 用于獲取事件目標(biāo)
(3)、stopPropagation() 阻止事件冒泡
(4)、perventDefault() 阻止默認(rèn)行為
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>事件流</title>
</head>
<body>
    <div id="box">
        <input type="button" id="btn" onclick = "showMessage();" value="按鈕" >
        <input type="button" id="btn2" value="按鈕2" >
        <input type="button" id="btn3" value="按鈕3" >
        <a href="event.html" id="go">跳轉(zhuǎn)</a>
    </div>
    <script>
    var btn3 = document.getElementById("btn3");
    var box= document.getElementById("box");
    var go= document.getElementById("go");
   
     function showMessage(event){
         // alert(event.type);
         alert(event.target.nodeName);
         event.stopPropagation();//阻止事件冒泡
       }
     function showBox(){
        alert("這是放按鈕的盒子");
     }
   function stopGoto(event){
       event.stopPropagation();//阻止事件冒泡
        event.preventDefault();//阻止默認(rèn)行為
     }
    
    var eventUtil={
            // 添加句柄
            addHandler:function(element,type,handler){
               if(element.addEventListener){
                 element.addEventListener(type,handler,false);
               }else if(element.attachEvent){
                 element.attachEvent('on'+type,handler);
               }else{
                 element['on'+type]=handler;
               }
            },
            // 刪除句柄
            removeHandler:function(element,type,handler){
               if(element.removeEventListener){
                 element.removeEventListener(type,handler,false);
               }else if(element.detachEvent){
                 element.detachEvent('on'+type,handler);
               }else{
                 element['on'+type]=null;
               }
            }
      }

//box下面有 3個(gè)按鈕和a鏈接
//點(diǎn)擊btn3的時(shí)候 dom下會(huì)有(非IE下)會(huì)有事件冒泡,也就是當(dāng)前btn3點(diǎn)擊是彈出click;外層的box也會(huì)觸發(fā)事件 彈出click;
       eventUtil.addHandler(btn3,'click',showMessage);
       eventUtil.addHandler(box,'click',showBox);
       eventUtil.addHandler(go,'click',stopGoto);

      //eventUtil.removeHandler(btn3,'click',showMessage);
    </script>

二、IE事件對(duì)象

1、DOM中的事件對(duì)象

(1)、type屬性 用于獲取事件類型
(2)、srcElement屬性 用于獲取事件目標(biāo)
(3)、cancelBubble() 阻止事件冒泡
                     (設(shè)置為true 阻止冒泡,false 不阻止冒泡)
(4)、returnValue() 阻止默認(rèn)行為
function showMessage(event){
         /*alert(event.type);
         alert(event.target.nodeName);
         event.stopPropagation();*/
         event = event || window.event;//兼容ie更早版本
         var ele= event.target ||event.srcElement
         alert(ele);
         event.stopPropagation();
       }

例子:去掉a 的默認(rèn)事件 阻止冒泡
index.html

<html>
 <head>
   <title>事件流</title>
   <meta charset="utf-8">
   <script src="js/event.js"></script>
   <script src="js/script.js"></script>
   </head>
   <body>
      <div id="box">
         <input type="button" value="按鈕" id="btn" onclick="showMes()">
         <input type="button" value="按鈕2" id="btn2">
         <input type="button" value="按鈕3" id="btn3">
         <a href="event.html" id="go">跳轉(zhuǎn)</a>
      </div>
   </body>

js文件 封裝

var eventUtil={
            // 添加句柄
            addHandler:function(element,type,handler){
               if(element.addEventListener){
                 element.addEventListener(type,handler,false);
               }else if(element.attachEvent){
                 element.attachEvent('on'+type,handler);
               }else{
                 element['on'+type]=handler;
               }
            },
            // 刪除句柄
            removeHandler:function(element,type,handler){
               if(element.removeEventListener){
                 element.removeEventListener(type,handler,false);
               }else if(element.detachEvent){
                 element.detachEvent('on'+type,handler);
               }else{
                 element['on'+type]=null;
               }
            },
          getEvent:function(event){
            return event?event:window.event;
          },
          getType:function(event){//事件類型
            return event.type;
          },
          getElement:function(event){//事件來源
            return event.target || event.srcElement;
          },
          preventDefault:function(event){//阻止默認(rèn)行為
            if(event.preventDefault){
              event.preventDefault();
            }else{
              event.returnValue=false;
            }
          },
         stopPropagation:function(event){//阻止冒泡
           if(event.stopPropagation){
             event.stopPropagation();
           }else{
             event.cancelBubble=true;
           }
         }
  }

script.js

window.onload=function(){
  var go=document.getElementById('go'),
      box=document.getElementById('box');

  eventUtil.addHandler(box,'click',function(){
    alert('我是整個(gè)父盒子');
  });

  eventUtil.addHandler(go,'click',function(e){
    //e=eventUtil.getEvent(e);
    e=e || window.event;
    alert(eventUtil.getElement(e).nodeName);
    eventUtil.preventDefault(e);
    eventUtil.stopPropagation(e);
  });

}

實(shí)例2:根據(jù)所學(xué)知識(shí),實(shí)現(xiàn)點(diǎn)擊頁面中的登錄按鈕,顯示登錄層(使用DOM2級(jí)監(jiān)聽事件哦!

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
     *{margin:0;padding:0;}
     .head{font-size:12px;padding:6px 0 0 10px;}
     #login_box{width:300px;height:150px;background:#eee;
     border:1px solid #ccc;position:absolute;left:50%;top:50%;margin-left:-150px;margin-top:-75px;display:none;}
     #login_box p{height:20px;border-bottom:1px solid #ccc;font-size:12px;padding:6px 0 0 5px;font-weight:bold;}
     #close{width:14px;height:14px;background:url(close.png) no-repeat;position:absolute;right:4px;top:6px;}
    </style>
    <script>
      window.onload=function(){
        var login_btn=document.getElementById('login'),
            login_box=document.getElementById('login_box'),
            close=document.getElementById('close');
        // 封裝添加事件監(jiān)聽程序
        function addEvent(ele,type,hander){
          if(ele.addEventListener){
            ele.addEventListener(type,hander,false);
          }else if(ele.attachEvent){
            ele.attachEvent('on'+type,hander);
          }else{
            ele['on'+type]=hander;
          }
        }
        // 顯示登錄層函數(shù)
        function showLogin(){
            login_box.style.display='block';
        }
        // 隱藏登錄層函數(shù)
        function hideLogin(){
          login_box.style.display='none';
        }
        //點(diǎn)擊登錄按鈕顯示登錄層 
        addEvent(login_btn,'click',showLogin);
        //點(diǎn)擊關(guān)閉按鈕隱藏登錄層
        addEvent(close,'click',hideLogin);
      }
    </script>
</head>
<body>
    <div class="head">親,您好!<input type="button" value="登 錄" id="login"></div>
    <div id="login_box">
        <p>用戶登錄</p><span id="close"></span>
    </div>
</body>
</html>

最后編輯于
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 事件對(duì)象 在觸發(fā)DOM上的某個(gè)事件時(shí),會(huì)產(chǎn)生一個(gè)事件對(duì)象event,這個(gè)對(duì)象中包含著所有與事件有關(guān)的信息。包括導(dǎo)致...
    落花的季節(jié)閱讀 241評(píng)論 0 1
  • 在觸發(fā)DOM上的某個(gè)事件時(shí),會(huì)產(chǎn)生一個(gè)事件對(duì)象event。這個(gè)對(duì)象中包含著所有與事件有關(guān)的信息。包括導(dǎo)致事件的元素...
    Miss____Du閱讀 5,175評(píng)論 0 7
  • 以下文章為轉(zhuǎn)載,對(duì)理解JavaScript中的事件處理機(jī)制很有幫助,淺顯易懂,特分享于此。 什么是事件? 事件(E...
    jxyjxy閱讀 3,169評(píng)論 1 10
  • JavaScript 程序采用了異步事件驅(qū)動(dòng)編程模型。在這種程序設(shè)計(jì)風(fēng)格下,當(dāng)文檔、瀏覽器、元素或與之相關(guān)的對(duì)象發(fā)...
    劼哥stone閱讀 1,333評(píng)論 3 11
  • 讀<<阿文的毯子>>讓我想起了媽媽小組上課時(shí),黃老師給我們講的一個(gè)案例。有個(gè)小朋友也和阿文一樣,不管去哪里,總是帶...
    水中的顏閱讀 325評(píng)論 0 0

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