欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

firefox事件處理之自動查找event的函數(shù)(用于onclick=foo())

 更新時間:2010年08月05日 03:33:40   作者:  
在ie中,事件對象是作為一個全局變量來保存和維護的。 所有的瀏覽器事件,不管是用戶觸發(fā)的,還是其他事件, 都會更新window.event 對象。
IE與firefox事件處理
在ie中,事件對象是作為一個全局變量來保存和維護的。 所有的瀏覽器事件,不管是用戶觸發(fā)
的,還是其他事件, 都會更新window.event 對象。 所以在代碼中,只要輕松調(diào)用 window.event
就可以輕松獲取 事件對象, 再 event.srcElement 就可以取得觸發(fā)事件的元素進行進一步處理
在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)理解了,并找到了解決的辦法。
但是。。。。事情還沒有結(jié)束。
看代碼
復制代碼 代碼如下:

<button id="btn" onclick="foo()">按鈕1</button>
<script>
function foo(){
alert(arguments[0] || window.event)
}
</script>

很不幸,我們 foo給我們的結(jié)果是 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;
}

簡單總結(jié):
以上兩個解決方法中,都正確處理 ff和ie下 的事件處理 (不管是onclick="foo()",方式還是 onclick=foo方式)
但是個人建議用 getEvent() 方法來統(tǒng)一處理 事件問題。

相關文章

  • js不完美解決click和dblclick事件沖突問題

    js不完美解決click和dblclick事件沖突問題

    當某個元素,如:div,同時綁定了click事件和dblclick事件,而這兩個事件又要處理相對獨立的業(yè)務,也就是click的時候不能觸發(fā)dblclick,dblclick的時候不能觸發(fā)click
    2012-07-07
  • javascript模擬git diff命令實現(xiàn)文本文件差異比較

    javascript模擬git diff命令實現(xiàn)文本文件差異比較

    這篇文章主要為大家詳細介紹了javascript如何模擬git diff命令實現(xiàn)文本文件差異比較效果,文中的示例代碼講解詳細,感興趣的小伙伴可以參考下
    2023-12-12
  • Bootstrap3 內(nèi)聯(lián)單選和多選框

    Bootstrap3 內(nèi)聯(lián)單選和多選框

    這篇文章主要介紹了Bootstrap3 內(nèi)聯(lián)單選和多選框的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-12-12
  • layui輸入框只允許輸入中文且判斷長度的例子

    layui輸入框只允許輸入中文且判斷長度的例子

    今天小編就為大家分享一篇layui輸入框只允許輸入中文且判斷長度的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • JS實現(xiàn)單行文字不間斷向上滾動的方法

    JS實現(xiàn)單行文字不間斷向上滾動的方法

    這篇文章主要介紹了JS實現(xiàn)單行文字不間斷向上滾動的方法,以實例形式較為詳細的分析了文字滾動效果實現(xiàn)的原理與技巧,需要的朋友可以參考下
    2015-01-01
  • 淺談JavaScript作用域和閉包

    淺談JavaScript作用域和閉包

    本篇文章主要介紹了JavaScript作用域和閉包,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Javascript編程之繼承實例匯總

    Javascript編程之繼承實例匯總

    這篇文章主要介紹了Javascript編程之繼承實現(xiàn)方法,結(jié)合實例形式分析匯總了五種常見的繼承技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • 微信小程序websocket聊天室的實現(xiàn)示例代碼

    微信小程序websocket聊天室的實現(xiàn)示例代碼

    這篇文章主要介紹了微信小程序websocket聊天室的實現(xiàn)示例代碼,小程序本身對http、websocket等連接均有諸多限制,所以這次項目選擇了node.js自帶的ws模塊。感興趣的可以參考一下
    2019-02-02
  • Bootstrap Table 雙擊、單擊行獲取該行及全表內(nèi)容

    Bootstrap Table 雙擊、單擊行獲取該行及全表內(nèi)容

    這篇文章主要介紹了Bootstrap Table 雙擊、單擊行獲取該行內(nèi)容及獲取全表的內(nèi)容,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08
  • JavaScript學習筆記(三):JavaScript也有入口Main函數(shù)

    JavaScript學習筆記(三):JavaScript也有入口Main函數(shù)

    大家都知道在c和java中,有main函數(shù)貨main方法作為一個程序的入口函數(shù)或方法。在JS中從js源文件的頭部開始運行的,我們?nèi)匀豢梢蕴摌?gòu)出一個main函數(shù)來作為程序的起點,這樣一來不僅可以跟其他語言統(tǒng)一了,而且說不定你會對JS有更深的理解。感興趣的小伙跟著小編一起學習吧
    2015-09-09

最新評論