成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript 事件——“事件對(duì)象”的注意要點(diǎn)

xuexiangjys / 604人閱讀

摘要:在觸發(fā)上的某個(gè)事件時(shí),會(huì)產(chǎn)生一個(gè)事件對(duì)象。中的事件對(duì)象兼容的瀏覽器會(huì)將一個(gè)對(duì)象傳入到事件處理程序中。返回布爾值,指示事件是否可擁可取消的默認(rèn)動(dòng)作。立即停止事件在層次中的傳播,即取消進(jìn)一步的事件捕獲或冒泡。

在觸發(fā)DOM上的某個(gè)事件時(shí),會(huì)產(chǎn)生一個(gè)事件對(duì)象event。

DOM中的事件對(duì)象

兼容DOM的瀏覽器會(huì)將一個(gè)event對(duì)象傳入到事件處理程序中。event對(duì)象包含與創(chuàng)建它的特定事件有關(guān)的屬性和方法。除法的事件類型不一樣,可用的屬性方法就不一樣。不過(guò),所有的事件都會(huì)有下表列出的成員。

下面列出了 2 級(jí) DOM 事件標(biāo)準(zhǔn)定義的屬性:

bubbles: 返回布爾值,指示事件是否是起泡事件類型。

cancelable: 返回布爾值,指示事件是否可擁可取消的默認(rèn)動(dòng)作。

currentTarget: 返回其事件監(jiān)聽器觸發(fā)該事件的元素。

eventPhase: 返回事件傳播的當(dāng)前階段。

target: 返回觸發(fā)此事件的元素(事件的目標(biāo)節(jié)點(diǎn))。

timeStamp: 返回事件生成的日期和時(shí)間。

type: 返回當(dāng)前 Event 對(duì)象表示的事件的名稱。

下面列出了 2 級(jí) DOM 事件標(biāo)準(zhǔn)定義的方法。IE 的事件模型不支持這些方法:

initEvent(): 初始化新創(chuàng)建的 Event 對(duì)象的屬性。

preventDefault(): 通知瀏覽器不要執(zhí)行與事件關(guān)聯(lián)的默認(rèn)動(dòng)作。

stopPropagation(): 不再派發(fā)事件。

this、targetcurrentTarget

在事件處理程序的內(nèi)部,對(duì)象this始終等于currentTarget的值,而target則只包含事件的實(shí)際目標(biāo)。如果直接將事件處理程序指定給了目標(biāo)元素,則this、currentTarget和target包含相同的值。如:

var btn = document.querySelector("#btn");
btn.onclick=function () {
    console.log(event.currentTarget === this); //true
    console.log(event.target === this); //true
}

由于click事件的目標(biāo)是btn按鈕,所以這三個(gè)值是相等的。如果事件處理程序在按鈕的父節(jié)點(diǎn)(document.body)中,那么這些值則不相同。如:

var btn = document.querySelector("#btn");
document.body.onclick=function () {
    console.log(event.currentTarget === document.body); //true
    console.log(this === document.body); //true
    console.log(event.target === btn); //true 因?yàn)閎tn沒有注冊(cè)事件處理程序,所以該click事件就冒泡到了document.body
}

在這里,this和currentTarget都是document.body,因?yàn)槭录幚沓绦蚴亲?cè)到這個(gè)元素上的。但是target元素卻等于按鈕元素,因?yàn)樗莄lick事件的真正目標(biāo)。由于按鈕并沒有注冊(cè)事件處理程序,結(jié)果click事件就冒泡到了document.body,在那里事件才能得到處理。

type

在需要通過(guò)一個(gè)函數(shù)處理多個(gè)事件時(shí),可以使用type屬性。如:

//獲取按鈕
var btn = document.querySelector("#btn");
//設(shè)置多個(gè)事件
var handler = function() {
//檢測(cè)事件的類型
    switch (event.type) {
        case "click":
            console.log("i click it");
            break;
        case "mouseover":
            console.log("i enter it");
            break;
        case "mouseout":
            console.log("i leave it");
            break;
    }
}
//給響應(yīng)的事件賦值
btn.onclick = handler;
btn.onmouseover = handler;
btn.onmouseout = handler;
preventDefault()

要阻止特定事件的默認(rèn)行為,可以使用該方法。如:

var aTags = document.getElementsByTagName("a");
for (var i = 0; i < aTags.length; i++) {
    var currentATag = aTags[i];
    currentATag.onclick = function() {
        event.preventDefault();
    }
};

以上代碼即屏蔽了網(wǎng)頁(yè)上全部的a標(biāo)簽超鏈接功能。要注意的是,只有cancelable屬性設(shè)置為true的事件,才可以使用preventDefault()來(lái)取消其默認(rèn)行為。

stopPropagation()

立即停止事件在DOM層次中的傳播,即取消進(jìn)一步的事件捕獲或冒泡。例如,直接添加到一個(gè)按鈕的事件處理程序可以調(diào)用該方法,從而避免觸發(fā)注冊(cè)在document.body上面的事件處理程序。如:

var btn = document.getElementById("btn");
btn.onclick = function () {
    console.log("btn clicked");
    // event.stopPropagation();
};
window.onclick = function () {
    console.log("clicked");
};
//單擊一下的結(jié)果:
//btn clicked
//clicked

又如:

var btn = document.getElementById("btn");
btn.onclick = function () {
    console.log("btn clicked");
    event.stopPropagation();
};
window.onclick = function () {
    console.log("clicked");
};
//單擊一下的結(jié)果:
//btn clicked
eventPhase

該屬性用來(lái)確定事件當(dāng)前正位于事件流的哪個(gè)階段。

如果是捕獲階段則等于1;

如果是目標(biāo)對(duì)象階段則等于2;

如果是冒泡階段則等于3;

如:

var btn = document.getElementById("btn");

document.body.addEventListener("click", function() {
    console.log("bodyListener" + event.eventPhase);
}, true) //捕獲階段

btn.onclick = function() {
    console.log("btn" + event.eventPhase);
} //目標(biāo)對(duì)象階段,實(shí)際上屬于冒泡階段(在btn上)

document.body.onclick = function() {
    console.log("body" + event.eventPhase);
} //冒泡階段(在body上)

又如:

var btn = document.getElementById("btn");

document.body.addEventListener("click", function() {
    console.log(event.eventPhase); //1
    console.log(event.currentTarget); //HTMLBodyElement
}, true);

btn.addEventListener("click", function() {
    console.log(event.eventPhase); //2
    console.log(event.currentTarget); //HTMLInputElement
});

document.body.addEventListener("click", function() {
    console.log(event.eventPhase); //3
    console.log(event.currentTarget); //HTMLBodyElement
});

流程大概是:

document.body 捕獲階段 --> btn 目標(biāo)對(duì)象階段 --> document.body 冒泡階段

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/78475.html

相關(guān)文章

  • JavaScript 事件——“事件流和事件處理程序”注意要點(diǎn)

    摘要:事件流級(jí)事件規(guī)定的事件流包括三個(gè)階段事件捕獲階段處于目標(biāo)階段和事件冒泡階段。事件處理程序的名字以開頭,如等。如使用級(jí)方法指定的事件處理程序被認(rèn)為是元素的方法。 事件流 事件流描述的是從頁(yè)面中接收事件的順序。IE的事件流是事件冒泡流,而Netscape Communicator的事件流是事件捕獲流。 事件冒泡 即事件開始時(shí)由最具體的元素接收,然后逐級(jí)向上傳播到較為不具體的節(jié)點(diǎn)。如: ...

    Amio 評(píng)論0 收藏0
  • JavaScript 事件——“模擬事件注意要點(diǎn)

    DOM中的事件模擬 三個(gè)步驟: 首先通過(guò)document.createEvent()方法創(chuàng)建event對(duì)象,接收一個(gè)參數(shù),即表示要?jiǎng)?chuàng)建的事件類型的字符串: UIEvents(DOM3中的UIEvent)鼠標(biāo)和鍵盤事件; MouseEvents(DOM3中的MouseEvent)鼠標(biāo)事件; MutationEvents(DOM3中的MutationEvent)變動(dòng)事件; HTMLEvents(沒有...

    BakerJ 評(píng)論0 收藏0
  • JavaScript 事件——“事件類型”中“設(shè)備事件”和“觸摸與手勢(shì)事件注意要點(diǎn)

    摘要:對(duì)象不包含任何信息事件事件,該事件已被移除,應(yīng)該使用事件但是事件仍然是實(shí)驗(yàn)性的事件,目前有部分瀏覽器暫時(shí)不支持。每個(gè)觸摸事件的對(duì)象都提供了在鼠標(biāo)事件中常見的屬性。 設(shè)備事件 orientationchange事件 該事件的window.orientation屬性中包含3個(gè)值:0表示肖像模式、90表示左旋轉(zhuǎn)的橫向模式、-90表示右旋轉(zhuǎn)的橫向模式。event對(duì)象不包含任何信息: wind...

    Ethan815 評(píng)論0 收藏0
  • JavaScript 事件——“事件類型”中“HTML5事件注意要點(diǎn)

    摘要:因?yàn)樵撌录儆谑髽?biāo)事件,所以其事件對(duì)象中包含與光標(biāo)位置有關(guān)的所有屬性。事件和屬性該事件在頁(yè)面顯示時(shí)觸發(fā),雖然這個(gè)事件的目標(biāo)是,但是必須將其事件處理程序添加到。事件該事件以便在的參數(shù)列表及中號(hào)后面的所有字符串發(fā)生變化時(shí)通知開發(fā)人員。 contextmenu事件 該事件用以表示何時(shí)應(yīng)該顯示上下文菜單,以便開發(fā)者取消默認(rèn)的上下文菜單,轉(zhuǎn)而提供自定義的菜單。 因?yàn)樵撌录儆谑髽?biāo)事件,所以其事...

    rozbo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<