最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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把事件對象自動傳
遞給對應(yīng)的事件處理函數(shù)。 在代碼中,函數(shù)的第一個參數(shù)就是ff下的事件對象了。
以上是我個人對兩個瀏覽器下的事件處理方法的粗淺理解,可能說得不是很明白,我寫些代碼來
詳細說明一下
復(fù)制代碼 代碼如下:

<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é)束。
看代碼
復(fù)制代碼 代碼如下:

<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ù),那么自己勤快點,自己傳

復(fù)制代碼 代碼如下:

<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>

方法二: 自動查找
復(fù)制代碼 代碼如下:

<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),我在其基礎(chǔ)上有所改進, 原函數(shù)如下
復(fù)制代碼 代碼如下:

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)一處理 事件問題。

相關(guān)文章

  • 詳解小程序如何改變onLoad的執(zhí)行時機

    詳解小程序如何改變onLoad的執(zhí)行時機

    這篇文章主要介紹了詳解小程序如何改變onLoad的執(zhí)行時機,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Code:loadScript( )加載js的功能函數(shù)

    Code:loadScript( )加載js的功能函數(shù)

    Code:loadScript( )加載js的功能函數(shù)...
    2007-02-02
  • javascript淘寶主圖放大鏡功能

    javascript淘寶主圖放大鏡功能

    這篇文章主要為大家詳細介紹了javascript淘寶主圖放大鏡功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • javascript操作excel生成報表全攻略

    javascript操作excel生成報表全攻略

    這篇文章主要介紹了如何使用javascript操作excel生成報表,需要的朋友可以參考下
    2014-05-05
  • 詳解ES6 Promise的生命周期和創(chuàng)建

    詳解ES6 Promise的生命周期和創(chuàng)建

    這篇文章主要介紹了詳解ES6 Promise Promise的生命周期和創(chuàng)建,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • JavaScript塊級作用域綁定以及狀態(tài)提升詳解

    JavaScript塊級作用域綁定以及狀態(tài)提升詳解

    這篇文章主要給大家介紹了關(guān)于JavaScript塊級作用域綁定以及狀態(tài)提升的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-03-03
  • javascript 無提示關(guān)閉窗口腳本

    javascript 無提示關(guān)閉窗口腳本

    在IE7、IE8中,使用JavaScript提供的close()方法都可以關(guān)閉當(dāng)前窗口或標(biāo)簽,但都提示討厭的對話框,找了下代碼,終于可以無提示直接關(guān)閉了。
    2009-08-08
  • javascript數(shù)據(jù)結(jié)構(gòu)之多叉樹經(jīng)典操作示例【創(chuàng)建、添加、遍歷、移除等】

    javascript數(shù)據(jù)結(jié)構(gòu)之多叉樹經(jīng)典操作示例【創(chuàng)建、添加、遍歷、移除等】

    這篇文章主要介紹了javascript數(shù)據(jù)結(jié)構(gòu)之多叉樹經(jīng)典操作,簡單描述了多叉樹的概念,并結(jié)合實例形式分析了javascript多叉樹的創(chuàng)建、添加、遍歷、移除等常見操作方法,需要的朋友可以參考下
    2018-08-08
  • 使用Promise和JavaScript有效處理1000個請求的方法

    使用Promise和JavaScript有效處理1000個請求的方法

    在現(xiàn)代Web開發(fā)中,處理高并發(fā)請求是一個常見的挑戰(zhàn),當(dāng)我們需要從服務(wù)器獲取大量數(shù)據(jù)或執(zhí)行多個異步任務(wù)時,如何有效地管理請求的并發(fā)性和性能變得至關(guān)重要,本文將介紹如何使用Promise和JavaScript來管理高并發(fā)請求,需要的朋友可以參考下
    2023-09-09
  • JavaScript中的50+個實用工具函數(shù)小結(jié)

    JavaScript中的50+個實用工具函數(shù)小結(jié)

    JavaScript可以做很多出色的事情,本篇文章給大家整理50+個實用工具函數(shù),可以幫助你提高工作效率并可以幫助調(diào)試代碼,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06

最新評論

宜春市| 宁晋县| 东乌珠穆沁旗| 太和县| 张家口市| 且末县| 瓮安县| 抚松县| 塘沽区| 胶州市| 东光县| 璧山县| 贵南县| 霍邱县| 凌海市| 山东省| 邵阳县| 瑞安市| 海南省| 敦化市| 岗巴县| 类乌齐县| 白水县| 康保县| 永福县| 东乌珠穆沁旗| 宁强县| 斗六市| 黎川县| 陆丰市| 襄樊市| 济阳县| 青州市| 富顺县| 西林县| 游戏| 岫岩| 哈尔滨市| 淳化县| 双桥区| 柏乡县|