欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2016年01月14日 08:46:17   作者:billyangg  
這篇文章主要介紹了JavaScript事件,告訴大家"事件對(duì)象"的注意要點(diǎ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)聽(tīng)器觸發(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、target、currentTarget

在事件處理程序的內(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沒(méi)有注冊(cè)事件處理程序,所以該click事件就冒泡到了document.body
}

在這里,this和currentTarget都是document.body,因?yàn)槭录幚沓绦蚴亲?cè)到這個(gè)元素上的。但是target元素卻等于按鈕元素,因?yàn)樗莄lick事件的真正目標(biāo)。由于按鈕并沒(méi)有注冊(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、如果是捕獲階段則等于1;
2、如果是目標(biāo)對(duì)象階段則等于2;
3、如果是冒泡階段則等于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 冒泡階段

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • webpack5新特性Asset?Modules資源模塊詳解

    webpack5新特性Asset?Modules資源模塊詳解

    這篇文章主要為大家介紹了webpack5新特性Asset?Modules資源模塊詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • 舉例講解JavaScript substring()的使用方法

    舉例講解JavaScript substring()的使用方法

    這篇文章主要通過(guò)舉例的方法講解了javaScript substring()的用法,substring() 方法用于提取字符串中介于兩個(gè)指定下標(biāo)之間的字符,感興趣的小伙伴們可以參考一下
    2015-11-11
  • js阻止冒泡及jquery阻止事件冒泡示例介紹

    js阻止冒泡及jquery阻止事件冒泡示例介紹

    JQuery 提供了兩種方式來(lái)阻止事件冒泡,Jquery阻止默認(rèn)動(dòng)作即通知瀏覽器不要執(zhí)行與事件關(guān)聯(lián)的默認(rèn)動(dòng)作,下文有個(gè)不錯(cuò)的示例,需要的朋友可以參考下
    2013-11-11
  • javascript 通用滑動(dòng)門tab類

    javascript 通用滑動(dòng)門tab類

    滑動(dòng)門JS并封裝成類
    2008-03-03
  • 深入理解選擇框腳本[推薦]

    深入理解選擇框腳本[推薦]

    選擇框是通過(guò)<select>和<option>元素創(chuàng)建的,又稱為下拉列表框。為了方便與這個(gè)控件交互,除了所有表單字段共有的屬性和方法外,javascript還提供了一些屬性和方法。本文將詳細(xì)介紹選擇框腳本
    2016-12-12
  • 淺析BootStrap Treeview的簡(jiǎn)單使用

    淺析BootStrap Treeview的簡(jiǎn)單使用

    bootstrap-treeview.js1是一款強(qiáng)大的樹(shù)菜單插件,本文給大家介紹bootstrap treeview的簡(jiǎn)單使用,涉及到使用要求及數(shù)據(jù)格式的介紹,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友參考下
    2016-10-10
  • 詳解JavaScript中var和let的區(qū)別

    詳解JavaScript中var和let的區(qū)別

    在JavaScript中,有3個(gè)關(guān)鍵字可以聲明變量:var、const和let,其中var在ECMAScript的所有版本中都可以使用,而const和let只能在ECMAScript 6及更晚的版本中使用,本文就來(lái)說(shuō)說(shuō)二者的區(qū)別,感興趣的可以了解一下
    2022-11-11
  • 5個(gè)可以幫你理解JavaScript核心閉包和作用域的小例子

    5個(gè)可以幫你理解JavaScript核心閉包和作用域的小例子

    這篇文章主要介紹了5個(gè)可以幫你理解JavaScript核心閉包和作用域的小例子,本文是翻譯自國(guó)外的一篇文章,短小精悍,需要的朋友可以參考下
    2014-10-10
  • 對(duì)象題目的一個(gè)坑 理解Javascript對(duì)象

    對(duì)象題目的一個(gè)坑 理解Javascript對(duì)象

    這篇文章主要介紹了Javascript對(duì)象,特別為大家分享了對(duì)象題目的一個(gè)坑,提供了解題思路,感興趣的小伙伴們可以參考一下
    2015-12-12
  • Blob對(duì)象實(shí)現(xiàn)文件上傳下載示例詳解

    Blob對(duì)象實(shí)現(xiàn)文件上傳下載示例詳解

    這篇文章主要為大家介紹了Blob對(duì)象實(shí)現(xiàn)文件上傳下載示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01

最新評(píng)論