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