事件捕獲(capture)和冒泡事件(Bubble)

PS:這里是我從別人的博客中學習事件捕獲和冒泡是的總結,如果你也感興趣的話,建議你點擊鏈接查看原博客的內容,他們寫的都是很經典!
??

???? 對“捕獲”和“冒泡”這兩個概念,我想我們對冒泡更熟悉一些,因為在我們使用的所有瀏覽器中,都支持事件冒泡 ,即事件由子元素向祖先元素傳播的,就 像氣泡從水底向水面上浮一樣。而在像firefox,chrome,safari這類所謂的標準瀏覽器中,事件傳播還有個階段,那就是捕獲階段,這個很少 有用武之地,所以被人疏忽遺忘也在所難免了,不常用不代表它不存在,本著科學嚴謹的態度,我們有必要去看一下它的廬山真面目。

事件捕獲

事實上,捕獲階段是一個和冒泡階段完全相反的過程,即事件由祖先元素向子元素傳播,和一個石子兒從水面向水底下沉一樣,要說明的是在 IE,opera瀏覽器中,是不存在這個階段的。從各瀏覽器提供的注冊事件監聽的方法中可見一斑,例如適用于ie,opera的attachEvent, 有兩個參數,attachEvent(”on”+type,fn),而適用于所謂標準瀏覽器的addEventListener則有三個參 數,addEventListener(type,fn,boolean),前面兩個參數不用解釋,第三個參數boolean,就是決定注冊事件發生在捕 獲階段還是冒泡階段,具體參考如下:

true : 捕獲階段

false : 冒泡階段

<html>
<head>

<title>
</title>
<style type="text/css">
*
{margin:0px;padding:0px;}
h1
{text-align:center;color:#666;margin-top:18px;}
#content
{width:700px;height:250px;border:5px solid green;margin:20px auto;position:relative;}
#obj1
{height:100px;background:#d5d5d5;}
#obj2
{background:#777;}
#obj3
{position:absolute;top:200px;left:150px;width:200px;background:#555;}
#obj4
{height:100px;background:#999;margin-top:50px;}
.active
{color:#f00}
</style>


</head>
<body>
<h1>悟透事件的捕獲和冒泡</h1>
<div id="content">
<div id="obj1">
<h2>元素a</h2>
<div id="obj2">
<h2>元素b</h2>
<div id="obj3">
<h2>元素c</h2>
</div>
</div>
</div>
<div id="obj4">
<h2>元素d</h2>
</div>
</div>
<script type="text/javascript">
var divs=document.getElementById("content").getElementsByTagName("div");
var count=1;
for(var i=0;i<divs.length;i++){
bindEvent(divs[i],
"click",function(){
var obj=document.createTextNode("->"+count++);
this.getElementsByTagName("h2")[0].insertBefore(obj,null);
this.className="active";
});
}
//取消冒泡事件
function stopBubble(e){
e
=e||window.event; //firefox,chrome,etc.||IE,opera
if(e.stopPropagation){
e.stopPropagation();
}
else{
e.cancelBubble
=true;
}
}

//綁定事件
function bindEvent(elem,type,fn){
if(elem.attachEvent){
var typedRef="_"+type;
if(!elem[typedRef]){
elem[typedRef]
=[];
}
for(var i in elem[typedRef]){
if(elem[typedRef][i]==fn){
return;
}
}
elem[typedRef].push(fn);
elem[
"on"+type]=function(){
for(var i inthis[typedRef]){
this[typedRef][i].apply(this,arguments);
}
}
}
else{
elem.addEventListener(type,fn,
false);//改為true 就是捕獲事件了
}
}
</script>
</body>

</html>

取消冒泡事件
?? 這時從《這里 》看到的,然后自己打了一次代碼加深印象的?
在默認情況下,發生在一個子元素上的單擊事件(或者其他事件),如果在其父級元素綁定了一個同樣的事件,此時點擊子元素,click事件會首先被子元素捕獲,執行綁定的事件程序,之后會被父級元素捕獲,再次激發一段腳本的執行,這就是所謂的“事件冒泡”。

<html>
<head>
<title>
<style type="text/css">
*
{ margin:0px; padding:0px;}
</style>
</title>
</head>
<body>
<div id="obj1" style="width:500px;height:500px; background:#000;">
<div id="obj2" style="width:400px;height:400px; background:red;"></div>
</div>
<script type="text/javascript">
function stopBubble(e){
//如果傳入了事件對象,那么就時非IE瀏覽器
if(e&&e.stopPropagtion){
e.stopPropagtion();
}
else{
window.event.canceBubble
=true;
}
}
var obj1=document.getElementById_x_x('obj1');
var obj2=document.getElementById_x_x('obj2');
obj1.onclick
=function(){
alert(
'我點擊了obj1');
}
obj2.onclick
=function(e){
alert(
'我點擊了obj2');
stopBubble(e);
}
</script>
</body>
</html>




轉載于:https://www.cnblogs.com/Jason-Damon/archive/2011/11/20/2255952.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/392870.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/392870.shtml
英文地址,請注明出處:http://en.pswp.cn/news/392870.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

gulp編譯css_如何用gulp縮小CSS

gulp編譯cssby Vinicius Gularte由Vinicius Gularte 如何用gulp縮小CSS (How to minify your CSS with gulp) In this article, Im going to show a simple way to automatically minify your CSS files using gulp. ?在本文中&#xff0c;我將展示一種使用gulp自動縮小CSS文…

線段樹(區間更改,區間查最值)模板

線段樹(區間更改,區間查最值)模板 主要重在理解線段樹,理解了怎么改都可以,還有以后不要直接抄模板,要寫出自己想的一份代碼 &代碼&#xff1a; #include <cstdio> #include <bitset> #include <iostream> #include <set> #include <cmath>…

Unity3D項目開發一點經驗

我們主要使用3dsmax2010進行制作&#xff0c;輸出FBX的類型導入Unity3D中。默認情況下&#xff0c;3dsmax8可以和U3D軟件直接融合&#xff0c;自動轉換為FBX物體。 注意事項如下&#xff1a; 1.面數控制 在MAX軟件中制作單一GameObject物體的面數不能超過65000個三角形&#xf…

leetcode 142. 環形鏈表 II(set/快慢指針)

給定一個鏈表&#xff0c;返回鏈表開始入環的第一個節點。 如果鏈表無環&#xff0c;則返回 null。 為了表示給定鏈表中的環&#xff0c;我們使用整數 pos 來表示鏈表尾連接到鏈表中的位置&#xff08;索引從 0 開始&#xff09;。 如果 pos 是 -1&#xff0c;則在該鏈表中沒有…

html5 支持表格嗎,html5 – 在HTML 5中使用表格很好嗎?

簡單規則 – 使用表格表格數據&#xff0c;使用其他元素進行演示(使用CSS設計布局)&#xff0c;如div&#xff0c;section&#xff0c;aside&#xff0c;nav等。這為他們所持有的內容提供了意義&#xff0c;而不是為所有內容使用表事實是&#xff0c;開發人員在90年代使用了表格…

css網格_我如何記住CSS網格屬性

css網格The syntax for CSS Grid is foreign and hard to remember. But if you can’t remember CSS Grid’s syntax, you won’t be confident when you use CSS Grid.CSS Grid的語法是外來的&#xff0c;很難記住。 但是&#xff0c;如果您不記得CSS Grid的語法&#xff0c;…

2017年讀書計劃(一)

前言 這篇博文就暫時不記錄技術了&#xff0c;記錄下生活。對自己今年2017年做個讀書計劃安排。 最近在看一部網絡劇 - 《花間提壺方大廚》&#xff0c;也許你們會感覺我很無聊&#xff0c;我也是被頭條帶壞了&#xff0c;每天上班一個小時的地下交通-地鐵&#xff0c;就借助上…

.net10個必備工具

1.NUnit 編寫單元測試的工具2.NDoc 自動生成代碼文檔的工具3.NAnt 編譯解決方案的工具4.CodeSmith 自動生成代碼的工具5.FxCop 檢查你的代碼是否按照規范編寫的工具6.Snippet Compiler 編譯少量代碼的工具7.ASP.NET Version Switcher Visual Studio .NET Project Conve…

音標

音標 oror ds念子音&#xff0c;ts念s音

leetcode 530. 二叉搜索樹的最小絕對差(中序遍歷)

給你一棵所有節點為非負值的二叉搜索樹&#xff0c;請你計算樹中任意兩節點的差的絕對值的最小值。示例&#xff1a;輸入&#xff1a;1\3/2輸出&#xff1a; 1解釋&#xff1a; 最小絕對差為 1&#xff0c;其中 2 和 1 的差的絕對值為 1&#xff08;或者 2 和 3&#xff09;。代…

計算機排線知識,一種計算機排線梳理裝置制造方法及圖紙

【技術實現步驟摘要】一種計算機排線梳理裝置本技術涉及計算機排線梳理&#xff0c;具體涉及一種計算機排線梳理裝置。技術介紹計算機俗稱電腦&#xff0c;是現代一種用于高速計算的電子計算機器&#xff0c;可以進行數值計算&#xff0c;又可以進行邏輯計算&#xff0c;還具有…

github和pypi_如何將GitHub用作PyPi服務器

github和pypiI was looking for a hosted private PyPi Python Package server, that used credentials that the team already has (such as GitHub).我正在尋找一個托管的私有PyPi Python Package服務器&#xff0c;該服務器使用了團隊已經擁有的憑據(例如GitHub)。 I didn’…

數據結構與算法---查找算法(Search Algorithm)

查找算法介紹 在java中&#xff0c;我們常用的查找有四種: 順序(線性)查找 二分查找/折半查找 插值查找斐波那契查找1)線性查找算法 示例&#xff1a; 有一個數列&#xff1a; {1,8, 10, 89, 1000, 1234} &#xff0c;判斷數列中是否包含此名稱【順序查找】 要求: 如果找到了&a…

Exchange Server 2007郵箱存儲服務器的集群和高可用性技術(上)

高可用性矩陣-->見下圖:郵箱服務器高可用性目標: 數據可用性-->保護郵箱數據免于失敗和損壞服務可用性-->提高群集實效轉移操作 簡化群集管理 支持地理分散的群集 支持低成本大郵箱(GB)使用戶可以基于業務需要更好的選擇容錯方案提高解決方案的可用性使用解決方案可…

【C/C++開發】C++實現字符串替換的兩種方法

替換字符串replace() erase()//C 第一種替換字符串的方法用replace()|C 第二種替換字符串的方法用erase()和insert()【 Cstring|C replace()|C erase()|C insert()|C自定義替換字符串函數】#include<string> #include<iostream> using namespace std;//第一種替換字…

html設置按鈕樣式變為橢圓,css border-radius圓形變為橢圓形,位置:絕對

我正在圍繞字體真棒圖標創建一個圓圈。我的問題是&#xff0c;當我添加position: absolute圓成為一個橢圓。css border-radius圓形變為橢圓形&#xff0c;位置&#xff1a;絕對同樣的情況&#xff0c;如果我是設置display: block這里是什么&#xff0c;我想實現的圖像 -CONRADU…

《火球——UML大戰需求分析》(第1章 大話UML)——1.5 小結和練習

說明&#xff1a; 《火球——UML大戰需求分析》是我撰寫的一本關于需求分析及UML方面的書&#xff0c;我將會在CSDN上為大家分享前面幾章的內容&#xff0c;總字數在幾萬以上&#xff0c;圖片有數十張。歡迎你按文章的序號順序閱讀&#xff0c;謝謝&#xff01;本書已經在各大網…

金陵科技學院計算機開設課程,金陵科技學院各專業介紹

各專業介紹會計學專業(四年制本科) 金融學專業(四年制本科)財務管理專業(四年制本科) 國際經濟與貿易專業(四年制本科)市場營銷專業(四年制本科)國際商務專業(三年制專科)物流管理專業(三年制專科) 對外漢語專業(四年制本科)古典文獻(古籍修復)專業(四年制本科)行政管理(高級秘…

【jQuery Demo】圖片由下至上逐漸顯示

無意中看到如何實現一張圖片從下往上慢慢顯現出來這個問題&#xff0c;弄了半天還是從上往下的效果&#xff0c;糾結了&#xff0c;最后還是提問人自己搞定了&#xff01;不過哈哈&#xff0c;又學到一點知識&#xff01; 1.下面是我自己做的效果(按鈕可以點哦) 圖片由下至上逐…

Morphia - mongodb之ORM框架

一、簡介 二、注解 1、Entity 2、Id3、Indexed4、Embedded5、Transient和Property6、Reference 三、示例 四、參考資料 Morphia快速入門 Morphia 注解詳解 使用Morphia框架操作mongodb 使用 Morphia 和 MongoDB 實現持久化 Spring中Mongodb的java實體類映射 ORM框架Morphia的學…