国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
書寫同時兼容IE和FireFox的事件event處理代碼
1.在ie中,事件對象是作為一個全局變量來保存和維護的。 所有的瀏覽器事件,不管是用戶觸發(fā)的,還是其他事件, 都會更新window.event 對象。 所以在代碼中,只要輕松調(diào)用 window.event 就可以輕松獲取事件對象, 再event.srcElement 就可以取得觸發(fā)事件的元素進行進一步處理。

2.在ff中, 事件對象卻不是全局對象,一般情況下,是現(xiàn)場發(fā)生,現(xiàn)場使用,ff把事件對象自動傳
遞給對應的事件處理函數(shù)。在代碼中,函數(shù)的第一個參數(shù)就是ff下的事件對象了。

以上是我個人對兩個瀏覽器下的事件處理方法的粗淺理解,可能說得不是很明白,我寫些代碼來詳細說明一下。
<button id="btn1">按鈕1</button>
<button id="btn2">按鈕2</button>
<button id="btn3">按鈕3</button>
<script>
 
 window.onload=function(){
     document.getElementById("btn1").onclick=foo1
     document.getElementById("btn2").onclick=foo2
     document.getElementById("btn3").onclick=foo3
 }
 
 function foo1(){
      //ie中, window.event使全局對象
     alert(window.event)   // ie下,顯示 "[object]" ,  ff下顯示 "undefined"
    
     //ff中,  第一個參數(shù)自動從為 事件對象
     alert(arguments[0])   // ie下,顯示  "undefined",  ff下顯示 "[object]"
 }
 
 function foo2(e){
     alert(window.event)  // ie下,顯示 "[object]" ,  ff下顯示 "undefined"
    
     //注意,我從來沒有給  foo2傳過參數(shù)哦。  現(xiàn)在 ff自動傳參數(shù)給 foo2, 傳的參數(shù)e 就是事件對象了
     alert(e)               // ie下,顯示  "undefined",  ff下顯示 "[object]"
 }
 
 function foo3(){    //同時兼容ie和ff的寫法,取事件對象
     alert(arguments[0] || window.event)  // ie 和 ff下,都顯示 "[object]"
     var evt=arguments[0] || window.event
     var element=evt.srcElement || evt.target  //在 ie和ff下  取得 btn3對象
     alert(element.id)           //    btn3
 }
</script>

看到這里,我們似乎對 ie和ff的事件處理方式都已經(jīng)理解了,并找到了解決的辦法。 但是。。。。事情還沒有結束??创a
<button id="btn" onclick="foo()">按鈕1</button>
<script>
function foo(){  
    alert(arguments[0] || window.event)
}
</script>

很不幸,我們 foo給我們的結果是 undefined, 而不是期望的 object

原因在于事件綁定的方式

onclick="foo()" 就是直接執(zhí)行了, foo() 函數(shù),沒有任何參數(shù)的,這種情況下firefox沒有機會傳遞任何參數(shù)給foo而 btn.onclick=foo 這種情況, 因為不是直接執(zhí)行函數(shù),firefox才有機會傳參數(shù)給foo

解決方法:

方法一:比較笨的方法,既然 firefox沒有機會傳參數(shù),那么自己勤快點,自己傳
<button id="btn" onclick="foo(event)">按鈕</button>
<script>
function foo(){  
   alert(arguments[0] || window.event)       
   var evt=arguments[0] || window.event
   var element=evt.srcElement || evt.target 
   alert(element.id)  
}
</script>

方法二: 自動查找
<button id="btn4" onclick="foo4()">按鈕4</button>
 <script>
 function foo4(){  
     var evt=getEvent()
     var element=evt.srcElement || evt.target 
     alert(element.id)        
 }
 
 function getEvent(){     //同時兼容ie和ff的寫法
         if(document.all)    return window.event;       
         func=getEvent.caller;           
         while(func!=null){   
             var arg0=func.arguments[0];
             if(arg0){
                 if((arg0.constructor==Event || arg0.constructor ==MouseEvent)
                     || (typeof(arg0)=="object" && arg0.preventDefault && arg0.stopPropagation)){   
                     return arg0;
                 }
             }
             func=func.caller;
         }
         return null;
 }
 </script>

方法二由 lostinet原創(chuàng),我在其基礎上有所改進, 原函數(shù)如下
function SearchEvent()
{
    //IE
    if(document.all)
        return window.event;
       
    func=SearchEvent.caller;
    while(func!=null)
    {
        var arg0=func.arguments[0];
        if(arg0)
        {
            if(arg0.constructor==Event)
                return arg0;
        }
        func=func.caller;
    }
    return null;
}

簡單總結:

以上兩個解決方法中,都正確處理 ff和ie下 的事件處理 (不管是onclick="foo()",方式還是 onclick=foo方式)但是個人建議用 getEvent() 方法來統(tǒng)一處理事件問題。
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
使用 DotNet 編寫瀏覽器外掛. NetBHO .
右鍵菜單的實現(xiàn)
IE和Firefox在JavaScript方面的兼容性
CSS的解決IE5/IE5.5/IE6/FF/IE7的兼容性問題(2)
ie和火狐兼容問題(轉載)
一個偵聽,多個按鈕
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服