摘要:方式方式方式指向節(jié)點(diǎn)對象輸出事件對象輸出事件對象輸出事件對象指向節(jié)點(diǎn)對象輸出事件對象輸出事件對象輸出事件對象指向全局對象輸出事件對象如果是方式定義的時候也可以沒有形參但是被調(diào)用的時候一定會傳遞一個事件對象如果有形參則用接收如果沒有可以在函數(shù)
hello1//方式1hello2//方式2hello3//方式3
如果是方式1,2,function定義的時候也可以沒有evt形參,但是被調(diào)用的時候一定會傳遞一個事件對象,如果有形參evt,則用evt接收,如果沒有,可以在函數(shù)內(nèi)直接通過event或arguments[0]訪問.
如果是方式3,當(dāng)是test()調(diào)用時,則不會傳遞事件對象,evt和arguments[0]均輸出undefined.如果是test(evt)調(diào)用,則傳遞事件對象,evt和arguments[0]均輸出事件對象
以下內(nèi)容都是基于http://harttle.com/2015/08/14...的總結(jié)
事件處理函數(shù)中,我們通常使用this來獲取當(dāng)前被操作的對象,但對于不同的事件綁定方式,this可能不一定指代的是當(dāng)前被操作的對象.常見的事件綁定方式基本上是以下這些:
1.attachEvent: IE9以下(不包括IE9).
2.addEventListener: 支持DOM Level2 Event的瀏覽器中.
3.el.onclick = function() {}
4.
attachEvent與addEventListener的區(qū)別
1.支持的瀏覽器不同,attachEvent在IE9以下的版本中受到支持,其他的都支持addEventListener.
2.參數(shù)不同,addEventListener第三個參數(shù)可以指定是否捕獲,而attachEvent不支持捕獲.
3.事件名不同.attachEvent的第一個參數(shù)事件名前要加on.
4.this不同.詳情見下
attachEvent方式的事件綁定
attachEvent的this總是指向Window.例如:
el.attachEvent("onclick", function() { alert(this); });
腳本設(shè)置onclick方式的事件綁定
設(shè)置DOM對象的onclick屬性,this總是指向被設(shè)置的DOM元素。例如:
document.getElementById("id1").onclick = function() { console.log(this);//...}
HTML中設(shè)置onclick方式的事件綁定
在HTML中設(shè)置onclick屬性等于讓W(xué)indow調(diào)用該函數(shù),于是this總是指向Window.例如:
addEventListener方式的事件綁定
addEventListener的this總是當(dāng)前正在處理事件的那個DOM對象,DOM Level2 Event Model中提到,事件處理包括捕獲階段/目標(biāo)階段/冒泡階段
圖片來源:http://www.w3.org/TR/DOM-Leve...
事件當(dāng)前正在流過哪個元素,this便指向哪個元素.比如兩級的DOM:
點(diǎn)擊div#l2后控制臺輸出為:
l1 capture?…?? l2 target?? l1 bubbling?…??
target與currentTarget
addEventListener的事件處理函數(shù)中的this不一定指向事實(shí)上被點(diǎn)擊的元素,但事件處理函數(shù)的參數(shù)event對象提供了target和currentTarget屬性來區(qū)分這當(dāng)前對象和目標(biāo)對象.我們可以將它們?nèi)枯敵隹纯?
l1.addEventListener("click", function(e) { console.log("l1 capture", this, e.currentTarget, e.target); }); l2.addEventListener("click", function(e) { console.log("l2 target", this, e.currentTarget, e.target); }); l1.addEventListener("click", function(e) { console.log("l1 bubbling", this, e.currentTarget, e.target); });
結(jié)果是:
l1 capture?…???…???? l2 target?????? l1 bubbling?…???…????
可見currentTarget總是和this相同,而target指向事實(shí)上被點(diǎn)擊的目標(biāo)DOM對象.
關(guān)于XMLHttpRequest的兼容性
添加響應(yīng)事件函數(shù)的兼容性
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/81893.html
摘要:下兼容問題,這個最好處理,轉(zhuǎn)化成兼容就可以。暫時還沒找到專用的兼容。高度不適應(yīng)高度不適應(yīng)是當(dāng)內(nèi)層對象的高度發(fā)生變化時外層高度不能自動進(jìn)行調(diào)節(jié),特別是當(dāng)內(nèi)層對象使用或時。只是目前并不支持。以上都是寫中的一些兼容,建議遵循 1.IE8下兼容問題,這個最好處理,轉(zhuǎn)化成ie7兼容就可以。在頭部加如下一段代碼,然后只要在IE7下兼容了,IE8下面也就兼容了 2.flaot浮動造成IE6下面...
摘要:三創(chuàng)建時發(fā)現(xiàn)這么一句話,不知其什么意思,百度如下這樣寫可以達(dá)到的效果是如果安裝了,則使用來渲染頁面,如果沒安裝,則使用最高版本的內(nèi)核進(jìn)行渲染。 在網(wǎng)站開發(fā)中不免因?yàn)楦鞣N兼容問題苦惱,針對兼容問題,其實(shí)IE給出了解決方案Google也給出了解決方案百度也應(yīng)用了這種方案去解決IE的兼容問題 百度源代碼如下 ; 百度一下,你就知道 var wpo={start:new Date*1...
摘要:三創(chuàng)建時發(fā)現(xiàn)這么一句話,不知其什么意思,百度如下這樣寫可以達(dá)到的效果是如果安裝了,則使用來渲染頁面,如果沒安裝,則使用最高版本的內(nèi)核進(jìn)行渲染。 在網(wǎng)站開發(fā)中不免因?yàn)楦鞣N兼容問題苦惱,針對兼容問題,其實(shí)IE給出了解決方案Google也給出了解決方案百度也應(yīng)用了這種方案去解決IE的兼容問題 百度源代碼如下 ; 百度一下,你就知道 var wpo={start:new Date*1...
摘要:三創(chuàng)建時發(fā)現(xiàn)這么一句話,不知其什么意思,百度如下這樣寫可以達(dá)到的效果是如果安裝了,則使用來渲染頁面,如果沒安裝,則使用最高版本的內(nèi)核進(jìn)行渲染。 在網(wǎng)站開發(fā)中不免因?yàn)楦鞣N兼容問題苦惱,針對兼容問題,其實(shí)IE給出了解決方案Google也給出了解決方案百度也應(yīng)用了這種方案去解決IE的兼容問題 百度源代碼如下 ; 百度一下,你就知道 var wpo={start:new Date*1...
摘要:三創(chuàng)建時發(fā)現(xiàn)這么一句話,不知其什么意思,百度如下這樣寫可以達(dá)到的效果是如果安裝了,則使用來渲染頁面,如果沒安裝,則使用最高版本的內(nèi)核進(jìn)行渲染。 在網(wǎng)站開發(fā)中不免因?yàn)楦鞣N兼容問題苦惱,針對兼容問題,其實(shí)IE給出了解決方案Google也給出了解決方案百度也應(yīng)用了這種方案去解決IE的兼容問題 百度源代碼如下 ; 百度一下,你就知道 var wpo={start:new Date*1...
閱讀 901·2021-09-22 15:17
閱讀 1924·2021-09-22 15:06
閱讀 2222·2021-09-08 09:35
閱讀 5109·2021-09-01 11:43
閱讀 3483·2019-08-30 15:55
閱讀 2156·2019-08-30 12:48
閱讀 3157·2019-08-30 12:45
閱讀 1787·2019-08-29 17:31