理解JavaScript事件物件_javascript技巧
在觸發DOM上的某個事件時,會產生一個事件物件event。
DOM中的事件物件
相容DOM的瀏覽器會將一個event物件傳入到事件處理程序中。 event物件包含與建立它的特定事件有關的屬性和方法。除法的事件類型不一樣,可用的屬性方法就不一樣。不過,所有的事件都會有下表列出的成員。
下面列出了 2 級 DOM 事件標準定義的屬性:
- bubbles: 傳回布林值,指示事件是否為起泡事件類型。
- cancelable: 傳回布林值,指示事件是否可擁可取消的預設動作。
- currentTarget: 傳回其事件監聽器觸發該事件的元素。
- eventPhase: 傳回事件傳播的目前階段。
- target: 傳回觸發此事件的元素(事件的目標節點)。
- timeStamp: 傳回事件產生的日期和時間。
-
type: 傳回目前 Event 物件表示的事件的名稱。
下面列出了 2 級 DOM 事件標準定義的方法。 IE 的事件模型不支援這些方法:
- initEvent(): 初始化新建立的 Event 物件的屬性。
- preventDefault(): 通知瀏覽器不要執行與事件關聯的預設動作。
- stopPropagation(): 不再派發事件。
this、target、currentTarget
在事件處理程序的內部,物件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按鈕,所以這三個值是相等的。如果事件處理程序在按鈕的父節點(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事件的真正目標。由於按鈕並沒有註冊事件處理程序,結果click事件就冒泡到了document.body,在那裡事件才能處理。
1、type
在需要透過一個函數處理多個事件時,可以使用type屬性。如:
//获取按钮 var btn = document.querySelector("#btn"); //设置多个事件 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; } } //给响应的事件赋值 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(); } };
以上程式碼即封鎖了網頁上全部的a標籤超連結功能。要注意的是,只有cancelable屬性設定為true的事件,才可以使用preventDefault()來取消其預設行為。
3、stopPropagation()
立即停止事件在DOM層次的傳播,即取消進一步的事件捕獲或冒泡。例如,直接加入到一個按鈕的事件處理程序可以呼叫該方法,從而避免觸發註冊在document.body上面的事件處理程序。如:
var btn = document.getElementById("btn"); btn.onclick = function () { console.log("btn clicked"); // event.stopPropagation(); }; window.onclick = function () { console.log("clicked"); }; //单击一下的结果: //btn clicked //clicked
又如:
var btn = document.getElementById("btn"); btn.onclick = function () { console.log("btn clicked"); event.stopPropagation(); }; window.onclick = function () { console.log("clicked"); }; //单击一下的结果: //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 冒泡階段
以上就是關於JavaScript事件對象,希望對大家的學習有所幫助。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

用法:在JavaScript中,insertBefore()方法用於在DOM樹中插入一個新的節點。這個方法需要兩個參數:要插入的新節點和參考節點(即新節點將要插入的位置的節點)。

JavaScript是一種廣泛應用於Web開發的程式語言,而WebSocket則是一種用於即時通訊的網路協定。結合二者的強大功能,我們可以打造一個高效率的即時影像處理系統。本文將介紹如何利用JavaScript和WebSocket來實作這個系統,並提供具體的程式碼範例。首先,我們需要明確指出即時影像處理系統的需求和目標。假設我們有一個攝影機設備,可以擷取即時的影像數
