首頁 web前端 js教程 Js冒泡事件詳解及阻止範例_javascript技巧

Js冒泡事件詳解及阻止範例_javascript技巧

May 16, 2016 pm 04:54 PM
冒泡事件 阻止

Js冒泡機制是指如果某元素定義了事件A,如click事件,如果觸發了事件之後,沒有阻止冒泡事件,那麼事件將向父級元素傳播,觸發父類別的click函數。
如下例所示:

複製程式碼 程式碼如下:


<script> <BR>function ialertdouble(e) { <BR>alert('innerdouble' ); <BR>stopBubble(e); <BR>} <BR><br>function ialertthree(e) { <br>alert('innerthree'); <BR>stopBubbleDouble(e); <BR>} <BR>} <br><br>function stopBubble(e) { <BR>var evt = e||window.event; <BR>evt.stopPropagation?evt.stopPropagation():(evt.cancelBubble=true);//阻止冒泡<BR>} <br><br>function stopBubbleDouble(e) { <BR>var evt = e||window.event; <BR>evt.stopPropagation?evt.stopPropagation():(evt.cancelBubble=true)/cancelBubble=)/cancelBubble=); /阻止冒泡<BR>evt.preventDefault();//阻止瀏覽器預設行為,這樣連結就不會跳轉<BR>} <br><br>$(function() { <BR>//方法一<BR>//$('#jquerytest').click(function(event) { <BR>// alert('innerfour'); <BR>// event.stopPropagation(); <BR>// event .preventDefault(); <BR>//}); <br><br>//方法二<BR>$('#jquerytest').click(function() { <BR>alert('innerfour'); <BR>return false; <BR>}); <BR>}); <BR></script>
without
middle
inner

innerdouble div>

innerthree


innerfour






當你點擊inner的時候,會依序彈出'inner','middle'和'without'。這就是事件冒泡。

從直覺來看,也是這樣的,因為最裡層的區域是在父級節點中的,點擊了子級節點的區域,其實也是點擊了父級節點的區域,所以事件會傳播起來。

其實,很多的時候,我們不想事件冒泡,因為這樣會同時觸發幾個事件。

接下來:我們點選innerdouble。就會發現她並沒有冒泡,因為她在呼叫的方法ialertdouble()中呼叫了stopBubble()方法,方法透過判斷瀏覽器型別(Ie透過cancleBubble() 、firefox透過stopProgation())來阻止冒泡。

但如果是連結的話,我們會發現她也會阻止冒泡,但是會跳轉,這就是瀏覽器的預設行為。需要藉助preventDefault()方法來阻止。具體可以查看ialertthree()。

目前主流的都是藉助jquery來綁定click事件的,這樣的話,就簡單多了。

我們可以在點擊事件時傳入參數event,然後直接

event.stopPropagation();
event.preventDefault(); //沒有連結不需要加上這個。

這樣就可以了。

框架就是好,其實還有更簡單的,在事件處理程序中回傳false,這是對在事件物件上同時呼叫stopPropagation()和preventDefault()的一種簡寫方式。
【詳細程式碼見上面,記得載入jquery.js。 】

其實也還可以在每個click事件中加入判斷:
複製程式碼 程式碼如下:

$('#id').click(function(event){
if(event.target==this){
//do something
}
})

解析:事件處理程序中的變數event保存事件物件。而event.target屬性則保存著發生事件的目標元素。這個屬性是DOM API中規定的,但是沒有被所有瀏覽器實作 。 jQuery對這個事件物件進行了必要的擴展,從而在任何瀏覽器中都能夠使用這個屬性。透過.target,可以確定DOM中首先接收到事件的元素(即實際被點擊的元素)。而且,我們知道this引用的是處理事件的DOM元素,所以可以寫以上程式碼。

不過推薦使用return false,Jquery綁定事件的話。
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

如何在 Edge 中阻止對網站的訪問 如何在 Edge 中阻止對網站的訪問 Jul 12, 2023 am 08:17 AM

有時,基於多種原因,我們希望在MicrosoftEdge上封鎖某些網站,無論是出於家長控制,時間管理,內容過濾,甚至是安全問題。一個常見的動機是提高生產力並保持專注。透過阻止分散注意力的網站,人們可以創造一個有利於工作或學習的環境,最大限度地減少潛在的干擾。最後,內容過濾對於維護安全和尊重的線上環境非常重要。阻止包含露骨、冒犯性或令人反感內容的網站在教育或專業環境中尤其重要,在這些環境中,維護適當的標準和價值觀至關重要。如果您可以與這種情況相關,那麼本文適合您。以下介紹如何在Edge中封鎖對網

閉包中如何有效避免記憶體洩漏? 閉包中如何有效避免記憶體洩漏? Jan 13, 2024 pm 12:46 PM

如何在閉包中阻止記憶體洩漏的發生?閉包是JavaScript中非常強大的特性之一,它能夠實現函數的巢狀和資料的封裝。然而,閉包也容易導致記憶體洩漏的問題,特別是在處理非同步和定時器的情況下。本文將介紹如何在閉包中阻止記憶體洩漏,並提供具體的程式碼範例。記憶體洩漏通常發生在不再需要某個物件時,卻因為某些原因無法釋放其所佔用的記憶體。在閉包中,當函數引用外部的變量,而這些變量

冒泡事件的常見阻止方法有哪些? 冒泡事件的常見阻止方法有哪些? Feb 19, 2024 pm 10:25 PM

常用的阻止冒泡事件指令有哪些?在Web開發中,我們經常會遇到需要處理事件冒泡的情況。當一個元素上觸發了某個事件,例如點擊事件,它的父級元素也會觸發相同的事件。這種事件傳遞的行為稱為事件冒泡。有時候,我們希望阻止事件冒泡,使事件只在當前元素上觸發,並阻止其向上級元素傳遞。為了實現這個目的,我們可以使用一些常見的阻止冒泡事件的指令。 event.stopPropa

如何在iPhone上封鎖簡訊 如何在iPhone上封鎖簡訊 Jul 31, 2023 pm 09:49 PM

如何阻止來自iPhone上某人的簡訊?如果您收到來自要封鎖的人的短信,則需要在iPhone上打開該訊息。打開訊息後,點擊頂部的圖標,其下方是手機號碼或寄件者姓名。現在點擊資訊在螢幕的右側;現在,您將看到另一個螢幕,其中包含阻止此呼叫者的選項。按一下此按鈕,然後選擇封鎖聯絡人。該電話號碼將無法再向您發送簡訊;它也將被阻止撥打您的iPhone。如何在iPhone上取消封鎖被封鎖的聯絡人?如果您決定允許被封鎖的人向您發送訊息,您可以隨時在iPhone上取消封鎖他們。若要在iPhone上取消封鎖聯絡人,您需

什麼事件不能冒泡 什麼事件不能冒泡 Nov 20, 2023 pm 03:00 PM

不能冒泡的事件有:1、focus事件;2、blur事件;3、scroll事件;4、mouseenter和mouseleave事;5、mouseover和mouseout事件;6、mousemove事件;7、keypress事件;8、beforeunload事件;9、DOMContentLoaded事件;10、cut、copy和paste事件等。

不支持冒泡的事件:限制及範圍 不支持冒泡的事件:限制及範圍 Jan 13, 2024 pm 12:51 PM

冒泡事件(BubblingEvent)是指在DOM樹中從子元素逐級觸發父元素的事件傳遞方式。大多數情況下,冒泡事件具有良好的靈活性和可擴展性,但是也存在一些特殊情況,這些情況下事件不支持冒泡。一、哪些事件不支持冒泡?雖然大部分的事件都支持冒泡,但有些事件是不支持冒泡的。以下是一些常見的不支援冒泡的事件:focus和blur事件load和unloa

冒泡事件的涵義是什麼 冒泡事件的涵義是什麼 Feb 19, 2024 am 11:53 AM

冒泡事件是指在網路開發中,當一個元素上觸發了某個事件後,該事件將會向上層元素傳播,直到達到文檔根元素。這種傳播方式就像氣泡從底部逐漸冒上來一樣,因此被稱為冒泡事件。在實際開發中,了解並理解冒泡事件的工作原理對於正確處理事件十分重要。以下將透過具體的程式碼範例來詳細介紹冒泡事件的概念和使用方法。首先,我們建立一個簡單的HTML頁面,其中包含一個父級元素和三個子

阻止冒泡事件的指令有哪些 阻止冒泡事件的指令有哪些 Nov 21, 2023 pm 04:14 PM

阻止冒泡事件的指令有stopPropagation()、cancelBubble屬性、event.stopPropagation()、event.cancelBubble屬性、event.stopImmediatePropagation()等。詳細介紹:1、stopPropagation()是最常用的指令之一,用於停止事件的傳播。當事件觸發時,呼叫該方法可以阻止事件繼續等等。

See all articles