国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁(yè) web前端 js教程 事件冒泡為何會(huì)觸發(fā)兩次?

事件冒泡為何會(huì)觸發(fā)兩次?

Feb 22, 2024 am 09:06 AM
事件冒泡 點(diǎn)擊事件 觸發(fā) 兩次

事件冒泡為何會(huì)觸發(fā)兩次?

事件為何冒泡會(huì)觸發(fā)兩次?

事件冒泡(Event Bubbling)是指在DOM中,當(dāng)一個(gè)元素觸發(fā)了某個(gè)事件(例如點(diǎn)擊事件),該事件會(huì)從該元素開始向上冒泡至父元素,直到冒泡到最頂層的文檔物件為止。事件冒泡是DOM事件模型的一部分,它允許開發(fā)者將事件監(jiān)聽綁定到父元素,從而在子元素觸發(fā)事件時(shí),可以透過(guò)冒泡機(jī)制來(lái)捕獲並處理事件。

然而,有時(shí)開發(fā)者會(huì)遇到事件冒泡觸發(fā)兩次的情況,這通常出現(xiàn)在巢狀元素中。為了更好地理解為何會(huì)觸發(fā)兩次,我們來(lái)看一個(gè)具體的程式碼範(fàn)例。

HTML程式碼如下:

<div id="parent">
  <div id="child">
    <button id="button">點(diǎn)擊我</button>
  </div>
</div>

JavaScript程式碼如下:

var parent = document.getElementById("parent");
var child = document.getElementById("child");
var button = document.getElementById("button");

parent.addEventListener("click", function(event) {
  console.log("父元素被點(diǎn)擊");
});

child.addEventListener("click", function(event) {
  console.log("子元素被點(diǎn)擊");
});

button.addEventListener("click", function(event) {
  console.log("按鈕被點(diǎn)擊");
  event.stopPropagation();
});

在上述程式碼中,我們有一個(gè)父元素、一個(gè)子元素和一個(gè)按鈕,分別綁定點(diǎn)擊事件監(jiān)聽。當(dāng)我們?cè)诰W(wǎng)頁(yè)中點(diǎn)擊按鈕時(shí),事件將依照冒泡規(guī)則從子元素傳遞至父元素。

現(xiàn)在,讓我們來(lái)模擬一次點(diǎn)擊按鈕的動(dòng)作。當(dāng)我們點(diǎn)擊按鈕時(shí),控制臺(tái)將列印以下輸出:

按鈕被點(diǎn)擊
子元素被點(diǎn)擊

為什麼會(huì)觸發(fā)兩次?

這是因?yàn)槭录芭菀獜挠|發(fā)元素開始依序向上冒泡至父元素,而在這個(gè)過(guò)程中經(jīng)過(guò)了子元素和父元素兩層。當(dāng)我們點(diǎn)擊按鈕時(shí),首先觸發(fā)了按鈕的點(diǎn)擊事件,列印出"按鈕被點(diǎn)擊"。接著,事件繼續(xù)冒泡至子元素,觸發(fā)了子元素的點(diǎn)擊事件,列印出"子元素被點(diǎn)擊"。最後,冒泡繼續(xù)至父元素,觸發(fā)了父元素的點(diǎn)擊事件。

那要如何阻止事件冒泡觸發(fā)兩次呢?

我們可以透過(guò)在按鈕的點(diǎn)擊事件處理函數(shù)中呼叫event.stopPropagation()來(lái)阻止事件繼續(xù)冒泡。在上述程式碼中,我們已經(jīng)在按鈕的點(diǎn)擊事件中使用了這個(gè)方法。當(dāng)我們?cè)俅吸c(diǎn)擊按鈕時(shí),控制臺(tái)將只列印出"按鈕被點(diǎn)擊",而不會(huì)繼續(xù)冒泡至子元素和父元素。

總結(jié)來(lái)說(shuō),事件冒泡會(huì)觸發(fā)兩次的情況通常出現(xiàn)在巢狀元素中,當(dāng)一個(gè)元素觸發(fā)了某個(gè)事件時(shí),事件會(huì)從觸發(fā)元素開始向上冒泡至父元素,直到冒泡到最頂層的文檔物件為止。然而,我們可以透過(guò)呼叫event.stopPropagation()來(lái)阻止事件繼續(xù)冒泡,從而達(dá)到阻止事件冒泡觸發(fā)兩次的目的。

以上是事件冒泡為何會(huì)觸發(fā)兩次?的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
layui登陸頁(yè)怎麼設(shè)定跳轉(zhuǎn) layui登陸頁(yè)怎麼設(shè)定跳轉(zhuǎn) Apr 04, 2024 am 03:12 AM

layui 登入頁(yè)面跳轉(zhuǎn)設(shè)定步驟:新增跳轉(zhuǎn)代碼:在登入表單提交按鈕點(diǎn)選事件中新增判斷,成功登入後透過(guò) window.location.href 跳到指定頁(yè)面。修改 form 配置:在 lay-filter="login" 的 form 元素中新增 hidden 輸入字段,name 為 "redirect",value 為目標(biāo)頁(yè)面位址。

vue中圖片怎麼加入碰事件 vue中圖片怎麼加入碰事件 May 02, 2024 pm 10:21 PM

如何為 Vue 中的圖片新增點(diǎn)擊事件?導(dǎo)入 Vue 實(shí)例。建立 Vue 實(shí)例。在 HTML 模板中新增圖片。使用 v-on:click 指令新增點(diǎn)擊事件。在 Vue 實(shí)例中定義 handleClick 方法。

鴻蒙 HarmonyOS 與 Go 語(yǔ)言開發(fā) 鴻蒙 HarmonyOS 與 Go 語(yǔ)言開發(fā) Apr 08, 2024 pm 04:48 PM

鴻蒙HarmonyOS與Go語(yǔ)言開發(fā)簡(jiǎn)介鴻蒙HarmonyOS是華為開發(fā)的分散式作業(yè)系統(tǒng),而Go是一種現(xiàn)代化的程式語(yǔ)言,兩者的結(jié)合為開發(fā)分散式應(yīng)用提供了強(qiáng)大的解決方案。本文將介紹如何在HarmonyOS中使用Go語(yǔ)言進(jìn)行開發(fā),並透過(guò)實(shí)戰(zhàn)案例加深理解。安裝與設(shè)定要使用Go語(yǔ)言開發(fā)HarmonyOS應(yīng)用,你需要先安裝GoSDK和HarmonyOSSDK。具體步驟如下:#安裝GoSDKgoge??tgithub.com/golang/go#設(shè)定PATH

vue怎麼給按鈕添加函數(shù) vue怎麼給按鈕添加函數(shù) Apr 08, 2025 am 08:51 AM

可以通過(guò)以下步驟為 Vue 按鈕添加函數(shù):將 HTML 模板中的按鈕綁定到一個(gè)方法。在 Vue 實(shí)例中定義該方法並編寫函數(shù)邏輯。

C++ 函式在並發(fā)程式設(shè)計(jì)中的事件驅(qū)動(dòng)機(jī)制? C++ 函式在並發(fā)程式設(shè)計(jì)中的事件驅(qū)動(dòng)機(jī)制? Apr 26, 2024 pm 02:15 PM

並發(fā)程式設(shè)計(jì)中的事件驅(qū)動(dòng)機(jī)制透過(guò)在事件發(fā)生時(shí)執(zhí)行回呼函數(shù)來(lái)回應(yīng)外部事件。在C++中,事件驅(qū)動(dòng)機(jī)制可用函數(shù)指標(biāo)實(shí)作:函數(shù)指標(biāo)可以註冊(cè)回呼函數(shù),在事件發(fā)生時(shí)執(zhí)行。 lambda表達(dá)式也可以實(shí)現(xiàn)事件回調(diào),允許建立匿名函數(shù)物件。實(shí)戰(zhàn)案例使用函數(shù)指標(biāo)實(shí)作GUI按鈕點(diǎn)擊事件,在事件發(fā)生時(shí)呼叫回呼函數(shù)並列印訊息。

css中div什麼意思 css中div什麼意思 Apr 28, 2024 pm 02:21 PM

CSS 中的 DIV 是一個(gè)文件分隔器或容器,用途包括:分組內(nèi)容、建立佈局、新增樣式和互動(dòng)性。在 HTML 中,DIV 元素使用語(yǔ)法 <div></div>,其中 div 表示元素,可以新增屬性和內(nèi)容。 DIV 是一個(gè)區(qū)塊級(jí)元素,在瀏覽器中會(huì)佔(zhàn)據(jù)一整行。

java中void的用法 java中void的用法 May 01, 2024 pm 06:15 PM

Java中的void表示方法不會(huì)傳回任何值,常用於執(zhí)行操作或初始化物件。 void方法的宣告格式為:void methodName(),呼叫方式為methodName()。 void方法常用於:1. 執(zhí)行操作而不回傳值;2. 初始化物件;3. 執(zhí)行事件處理操作;4. 協(xié)同程序。

JavaScript 取得網(wǎng)頁(yè)元素詳解 JavaScript 取得網(wǎng)頁(yè)元素詳解 Apr 09, 2024 pm 12:45 PM

答:JavaScript提供了多種取得網(wǎng)頁(yè)元素的方法,包括使用id、標(biāo)籤名、類別名稱和CSS選擇器。詳細(xì)描述:getElementById(id):根據(jù)唯一id取得元素。 getElementsByTagName(tag):取得具有指定標(biāo)籤名的元素組。 getElementsByClassName(class):取得具有指定類別名稱的元素組。 querySelector(selector):使用CSS選擇器取得第一個(gè)符合元素。 querySelectorAll(selector):使用CSS選擇器取得所有匹配

See all articles