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

理解JavaScript事件對象

 更新時間:2016年01月25日 11:50:40   投稿:lijiao  
這篇文章主要為大家介紹了JavaScript事件對象,了解JavaScript事件

在觸發(fā)DOM上的某個事件時,會產(chǎn)生一個事件對象event。

DOM中的事件對象

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

下面列出了 2 級 DOM 事件標準定義的屬性:

  • bubbles: 返回布爾值,指示事件是否是起泡事件類型。
  • cancelable: 返回布爾值,指示事件是否可擁可取消的默認動作。
  • currentTarget: 返回其事件監(jiān)聽器觸發(fā)該事件的元素。
  • eventPhase: 返回事件傳播的當前階段。
  • target: 返回觸發(fā)此事件的元素(事件的目標節(jié)點)。
  • timeStamp: 返回事件生成的日期和時間。
  • type: 返回當前 Event 對象表示的事件的名稱。

下面列出了 2 級 DOM 事件標準定義的方法。IE 的事件模型不支持這些方法:

  • initEvent(): 初始化新創(chuàng)建的 Event 對象的屬性。
  • preventDefault(): 通知瀏覽器不要執(zhí)行與事件關(guān)聯(lián)的默認動作。
  • stopPropagation(): 不再派發(fā)事件。

this、target、currentTarget

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

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

由于click事件的目標是btn按鈕,所以這三個值是相等的。如果事件處理程序在按鈕的父節(jié)點(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 因為btn沒有注冊事件處理程序,所以該click事件就冒泡到了document.body
}

在這里,this和currentTarget都是document.body,因為事件處理程序是注冊到這個元素上的。但是target元素卻等于按鈕元素,因為它是click事件的真正目標。由于按鈕并沒有注冊事件處理程序,結(jié)果click事件就冒泡到了document.body,在那里事件才能得到處理。

1、type

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

//獲取按鈕
var btn = document.querySelector("#btn");
//設(shè)置多個事件
var handler = function() {
//檢測事件的類型
  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;

2、preventDefault()

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

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

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

3、stopPropagation()

立即停止事件在DOM層次中的傳播,即取消進一步的事件捕獲或冒泡。例如,直接添加到一個按鈕的事件處理程序可以調(diào)用該方法,從而避免觸發(fā)注冊在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

該屬性用來確定事件當前正位于事件流的哪個階段。

  • 如果是捕獲階段則等于1;
  • 如果是目標對象階段則等于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);
} //目標對象階段,實際上屬于冒泡階段(在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 目標對象階段 --> document.body 冒泡階段

以上就是關(guān)于JavaScript事件對象,希望對大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • 解決eclipse中沒有js代碼提示的問題

    解決eclipse中沒有js代碼提示的問題

    今天小編就為大家分享一篇解決eclipse中沒有js代碼提示的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • 使用js編寫實現(xiàn)拼圖游戲

    使用js編寫實現(xiàn)拼圖游戲

    這篇文章主要為大家詳細介紹了使用js編寫實現(xiàn)拼圖游戲,一種是拖拽拼圖,一種是經(jīng)典的九宮格拼圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 從對象列表中獲取一個對象的方法,依據(jù)關(guān)鍵字和值

    從對象列表中獲取一個對象的方法,依據(jù)關(guān)鍵字和值

    下面小編就為大家?guī)硪黄獜膶ο罅斜碇蝎@取一個對象的方法,依據(jù)關(guān)鍵字和值。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • JS動態(tài)給對象添加事件的簡單方法

    JS動態(tài)給對象添加事件的簡單方法

    下面小編就為大家?guī)硪黄狫S動態(tài)給對象添加事件的簡單方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • JavaScript實現(xiàn)簡單生成隨機顏色的方法

    JavaScript實現(xiàn)簡單生成隨機顏色的方法

    這篇文章主要介紹了JavaScript實現(xiàn)簡單生成隨機顏色的方法,涉及javascript隨機數(shù)與字符串運算及頁面元素屬性動態(tài)操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-09-09
  • jQuery 名稱沖突的解決方法

    jQuery 名稱沖突的解決方法

    jQuery 使用 $ 符號作為 jQuery 的簡介方式。某些其他 JavaScript 庫中的函數(shù)(比如 Prototype)同樣使用 $ 符號。
    2011-04-04
  • uniapp插件uview下表單無法動態(tài)校驗的問題解決

    uniapp插件uview下表單無法動態(tài)校驗的問題解決

    最近項目中用到了uview?在做表單時用到了校驗,發(fā)現(xiàn)校驗不友好的結(jié)果,下面這篇文章主要給大家介紹了關(guān)于uniapp插件uview下表單無法動態(tài)校驗的問題解決,需要的朋友可以參考下
    2022-12-12
  • 原生js實現(xiàn)自定義難度的掃雷游戲

    原生js實現(xiàn)自定義難度的掃雷游戲

    這篇文章主要為大家詳細介紹了原生js實現(xiàn)自定義難度的掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • 微信小程序?qū)崿F(xiàn)用table顯示數(shù)據(jù)庫反饋的多條數(shù)據(jù)功能示例

    微信小程序?qū)崿F(xiàn)用table顯示數(shù)據(jù)庫反饋的多條數(shù)據(jù)功能示例

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)用table顯示數(shù)據(jù)庫反饋的多條數(shù)據(jù)功能,涉及微信小程序wx.request訪問php后臺及返回結(jié)果的顯示布局相關(guān)操作技巧,需要的朋友可以參考下
    2019-05-05
  • JavaScript常用驗證函數(shù)實例匯總

    JavaScript常用驗證函數(shù)實例匯總

    這篇文章主要介紹了JavaScript常用驗證函數(shù),實例匯總了如字符串驗證、表單驗證及js常用特效等諸多js常用驗證函數(shù)及相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下
    2014-11-11

最新評論