亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

firefox 和 ie 事件處理的細(xì)節(jié),研究,再研究 書寫同時兼容ie和ff的事件處理代碼

 更新時間:2007年04月12日 00:00:00   作者:  
firefox 和 ie 事件處理的細(xì)節(jié),研究,再研究 書寫同時兼容ie和ff的事件處理代碼

在ie中,事件對象是作為一個全局變量來保存和維護(hù)的。 所有的瀏覽器事件,不管是用戶觸發(fā)的,還是其他事件, 都會更新window.event 對象。 所以在代碼中,只要輕松調(diào)用 window.event 就可以輕松獲取 事件對象, 再 event.srcElement 就可以取得觸發(fā)事件的元素進(jìn)行進(jìn)一步處理在ff中, 事件對象卻不是全局對象,一般情況下,是現(xiàn)場發(fā)生,現(xiàn)場使用,ff把事件對象自動傳遞給對應(yīng)的事件處理函數(shù)。 在代碼中,函數(shù)的第一個參數(shù)就是ff下的事件對象了。
以上是我個人對兩個瀏覽器下的事件處理方法的粗淺理解,可能說得不是很明白,我寫些代碼來
詳細(xì)說明一下

復(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ǔ)上有所改進(jìn), 原函數(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)一處理 事件問題。
先寫到這里,大家繼續(xù)。。

相關(guān)文章

  • Javascript中的作用域和上下文深入理解

    Javascript中的作用域和上下文深入理解

    這篇文章主要介紹了Javascript中的作用域和上下文深入理解,本文講解了作用域 VS 上下文、變量作用域、“this”上下文、執(zhí)行上下文(Execution Context)、作用域鏈等內(nèi)容,需要的朋友可以參考下
    2015-07-07
  • JavaScript對象創(chuàng)建模式實例匯總

    JavaScript對象創(chuàng)建模式實例匯總

    這篇文章主要介紹了JavaScript對象創(chuàng)建模式,結(jié)合實例形式總結(jié)分析了JavaScript常見的對象創(chuàng)建模式,包括工廠模式、構(gòu)造函數(shù)模式、原型模式、動態(tài)原型模式、寄生構(gòu)造函數(shù)模式、穩(wěn)妥構(gòu)造函數(shù)模式等,需要的朋友可以參考下
    2016-10-10
  • JS中怎樣判斷undefined(比較不錯的方法)

    JS中怎樣判斷undefined(比較不錯的方法)

    用servlet賦值給html頁面文本框值后,用alert來彈出這個值.結(jié)果顯示"undefined".下面為大家介紹下具體的判斷方法,大家可以參考下
    2014-03-03
  • javascript 冒泡排序 正序和倒序?qū)崿F(xiàn)代碼

    javascript 冒泡排序 正序和倒序?qū)崿F(xiàn)代碼

    javascript 冒泡排序 正序和倒序?qū)崿F(xiàn)代碼,需要的朋友可以參考下。
    2010-12-12
  • javacript獲取當(dāng)前屏幕大小

    javacript獲取當(dāng)前屏幕大小

    本文主要介紹使用javacript獲取當(dāng)前屏幕大小的方法,需要的朋友可以參考下。
    2016-06-06
  • JavaScript事件循環(huán)同步任務(wù)與異步任務(wù)

    JavaScript事件循環(huán)同步任務(wù)與異步任務(wù)

    這篇文章主要介紹了JavaScript事件循環(huán)同步任務(wù)與異步任務(wù),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-07-07
  • JS實現(xiàn)五星好評效果

    JS實現(xiàn)五星好評效果

    這篇文章主要為大家詳細(xì)介紹了JS實現(xiàn)五星好評效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • uniapp安卓本地寫入讀取文件簡單示例

    uniapp安卓本地寫入讀取文件簡單示例

    這篇文章主要給大家介紹了關(guān)于uniapp安卓本地寫入讀取文件的相關(guān)資料,在uniapp中可以使用uni-app提供的API實現(xiàn)本地文件讀取和寫入,需要的朋友可以參考下
    2023-11-11
  • js實現(xiàn)簡單的倒計時

    js實現(xiàn)簡單的倒計時

    這篇文章主要為大家詳細(xì)介紹了js實現(xiàn)簡單的倒計時,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • JS鼠標(biāo)拖拽實例分析

    JS鼠標(biāo)拖拽實例分析

    這篇文章主要介紹了JS鼠標(biāo)拖拽實現(xiàn)方法,實例分析JavaScript鼠標(biāo)事件及頁面元素屬性動態(tài)變換的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11

最新評論