好好學一遍JavaScript 筆記(十)——IE跟DOM事件函數區別

一、獲取目標
位於事件中心的對象稱爲目標(target).假設爲<div/>元素分配onclick事件處理函數、觸發click事件時、<div/>就被認爲是目標。IE、目標包含在event對象的srcElement屬性中:javascript

  
  
           
  
  
  1. var oTarget = oEvent.srcElement;   

在DOM兼容的瀏覽器中、目標包含在target屬性中:html

  
  
           
  
  
  1. var oTarget = oEvent.target;   

示例:java

  
  
           
  
  
  1. <div id="divId" onclick="testFunction(event)">點擊 </div>   
  2.     <script type="text/javascript" >        
  3.         var sUserAgent = navigator.userAgent;        
  4.         var isIE = sUserAgent.indexOf("compatible") > -1 && sUserAgent.indexOf("MSIE") > -1;   
  5.         var isMoz = sUserAgent.indexOf("Gecko") > -1;     
  6.         function testFunction(oEvent){   
  7.             if(isIE){      
  8.                 alert("IE");   
  9.                 var oEvent = window.event;      
  10.                 //IE、目標包含在event對象的srcElement屬性中:   
  11.                 var oTarget = oEvent.srcElement;      
  12.                 alert(oTarget.innerText);               
  13.                 return;    
  14.             }      
  15.             if(isMoz){   
  16.                 alert("火狐: "+oEvent);    
  17.                 /**  
  18.                  *   
  19.                  * 直接innerText這樣火狐不支持、它支持innerHTML  
  20.                  * 因此要用innerText須要處理一下.    
  21.                  *   
  22.                  * 讓火狐兼容innerText**/   
  23.                 HTMLElement.prototype.__defineGetter__("innerText",   
  24.                 function ()   
  25.                 {   
  26.                     var anyString = "";   
  27.                     var childS = this.childNodes;   
  28.                     for (var i = 0; i < childS.length; i++)   
  29.                     {   
  30.                         if (childS[i].nodeType == 1)   
  31.                             anyString += childS[i].tagName == "BR"   
  32.                              ? "\r\n" : childS[i].textContent;   
  33.                         else if (childS[i].nodeType == 3)   
  34.                             anyString += childS[i].nodeValue;   
  35.                     }   
  36.                     return anyString;   
  37.                 });   
  38.                 HTMLElement.prototype.__defineSetter__("innerText",   
  39.                 function (sText)   
  40.                 {   
  41.                     this.textContent = sText;     
  42.                 });   
  43.                 /**end**/     
  44.                 //在DOM兼容的瀏覽器中、目標包含在target屬性中:   
  45.                 var oTarget = oEvent.target;       
  46.                 alert(oTarget.innerText);                         
  47.                 return;         
  48.             }       
  49.         }   
  50.            
  51.     </script>   

二、阻止某個事件的默認行爲IE必須將returnValue屬性設值爲false:node

  
  
           
  
  
  1. oEvent.returnValue = false;   

而在Mozilla中、只要調用preventDefault()方法:瀏覽器

  
  
           
  
  
  1. oEvent.preventDefault();  

用戶右擊頁面時、阻止他使用菜單。只要阻止contextmenu事件的默認行爲就能夠了:ide

  
  
           
  
  
  1. doucment.body.oncontextmenu = function (oEvent){   
  2.     if(isIE){   
  3.         oEvent = window.event;   
  4.         oEvent.returnValue = false;   
  5.     }else{   
  6.         oEvent.preventDefault();   
  7.     }   
  8. };   

三、中止事件複製(冒泡) 
IE中、要阻止事件進一步冒泡、必須設置cancelBubble屬性爲true:
函數

  
  
           
  
  
  1. oEvent.cancelBubble = true

在Mozilla中、只需調用stopPropagation()方法:this

  
  
           
  
  
  1. oEvent.stopPropagation();  

中止事件複製能夠阻止事件流中的其它對象的事件處理函數執行、點擊下面button按鈕會彈出input、body、html這是由於事件先從input元素冒泡到body、而後到html :spa

  
  
           
  
  
  1. <html onclick="alert('html');">   
  2.   <head>   
  3.     <title>中止事件複製(冒泡)</title>   
  4.   </head>    
  5.   <body  onclick="alert('body');">   
  6.     <input type="button" onclick="alert('input');" value="點擊" />      
  7.   </body>    
  8. </html> 

下面就在按鈕上中止複製(冒泡):prototype

 

  
  
           
  
  
  1. <html onclick="alert('html');">   
  2.   <head>   
  3.     <title>中止事件複製(冒泡)</title>   
  4.     <script type="text/javascript">   
  5.         var sUserAgent = navigator.userAgent;          
  6.         var isIE = sUserAgent.indexOf("compatible") > -1 && sUserAgent.indexOf("MSIE") > -1;   
  7.         function testClick(oEvent){   
  8.             alert("input");   
  9.             if(isIE){   
  10.                 var oEvent = window.event;   
  11.                 oEvent.cancelBubble = true;   
  12.             }else{   
  13.                 oEvent.stopPropagation();     
  14.             }      
  15.         }      
  16.     </script>   
  17.   </head>    
  18.   <body  onclick="alert('body');">   
  19.     <input type="button" onclick="testClick(event);" value="點擊" />      
  20.  <br />      
  21.   </body>    
  22. </html>   
相關文章
相關標籤/搜索