javascript如何阻止事件冒泡和默認行為

阻止冒泡:?
冒泡簡單的舉例來說,兒子知道了一個秘密消息,它告訴了爸爸,爸爸知道了又告訴了爺爺,一級級傳遞從而以引起事件的混亂,而阻止冒泡就是不讓兒子告訴爸爸,爸爸自然不會告訴爺爺。下面的demo 就是很好的例子
<!DOCTYPE html> 
<html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> #box { width: 300px; height: 300px; background: red; display: none; } </style> <script type="text/javascript"> window.onload = function() { var btn = document.getElementById('btn'); var box = document.getElementById('box'); btn.onclick = function(ev) { var oEvent = ev || event; box.style.display = 'block'; //oEvent.cancelBubble = true;//高版本瀏覽器 stopBubble(oEvent); //在低版本的chrome和firefox瀏覽器中需要兼容性處理 //高版本chrome和firefox瀏覽器直接使用上面這行代碼即可 } document.onclick = function() { box.style.display = 'none'; } } //阻止冒泡事件的兼容性處理 function stopBubble(e) { if(e && e.stopPropagation) { //非IE e.stopPropagation(); } else { //IE window.event.cancelBubble = true; } } </script> </head> <body> <input type="button" id="btn" value="語言" /> <div id="box"></div> </body> </html>
x
48
 ?
1
<!DOCTYPE html> 
2
<html> 
3
 ?
4
 ?<head> 
5
 ? ?<meta charset="UTF-8"> 
6
 ? ?<title></title> 
7
 ? ?<style type="text/css"> 
8
 ? ? ?#box { 
9
 ? ? ? ?width: 300px; 
10
 ? ? ? ?height: 300px; 
11
 ? ? ? ?background: red; 
12
 ? ? ? ?display: none; 
13
 ? ?  } 
14
 ? ?</style> 
15
 ? ?<script type="text/javascript"> 
16
 ? ? ?window.onload = function() { 
17
 ? ? ? ? ?var btn = document.getElementById('btn'); 
18
 ? ? ? ? ?var box = document.getElementById('box'); 
19
 ? ? ? ? ?btn.onclick = function(ev) { 
20
 ? ? ? ? ? ?var oEvent = ev || event; 
21
 ? ? ? ? ? ?box.style.display = 'block'; 
22
 ? ? ? ? ? ?//oEvent.cancelBubble = true;//高版本瀏覽器 
23
 ? ? ? ? ? ?stopBubble(oEvent); 
24
 ? ? ? ? ? ?//在低版本的chrome和firefox瀏覽器中需要兼容性處理 
25
 ? ? ? ? ? ?//高版本chrome和firefox瀏覽器直接使用上面這行代碼即可 
26
 ? ? ? ?  } 
27
 ? ? ? ? ?document.onclick = function() { 
28
 ? ? ? ? ? ?box.style.display = 'none'; 
29
 ? ? ? ?  } 
30
 ?
31
 ? ? ?  } 
32
 ? ? ? ?//阻止冒泡事件的兼容性處理 
33
 ? ? ?function stopBubble(e) { 
34
 ? ? ? ?if(e && e.stopPropagation) { //非IE 
35
 ? ? ? ? ?e.stopPropagation(); 
36
 ? ? ?  } else { //IE 
37
 ? ? ? ? ?window.event.cancelBubble = true; 
38
 ? ? ?  } 
39
 ? ?  } 
40
 ? ?</script> 
41
 ?</head> 
42
 ?
43
 ?<body> 
44
 ? ?<input type="button" id="btn" value="語言" /> 
45
 ? ?<div id="box"></div> 
46
 ?</body> 
47
 ?
48
</html>
我所實現的效果是:點擊按鈕btn讓box顯示,而點擊其他地方則讓box消失。
如果我不阻止冒泡的話,那么首先btn會觸發點擊時間,讓盒子顯示,但是由于box是包含在document中的,所以會向上冒泡又觸發document的點擊事件,盒子又消失。這個事件的執行順序可以在不同的點擊事件中使用alert來驗證。關于cancelBubble的兼容性處理在高版本的chrome和firefox中已經不需要兼容處理了,直接使用oEvent.cancelBubble = true 即可。下面的阻止瀏覽器事件的兼容性處理在高版本瀏覽器中同樣不需要。

默認事件。即瀏覽器本身具備的功能。
function preventDefa(e){ if(window.event){ //IE中阻止函數器默認動作的方式  window.event.returnValue = false;  } else{ //阻止默認瀏覽器動作(W3C)  e.preventDefault(); }  
} 
1
10
1
function preventDefa(e){ 
2
 ?if(window.event){ 
3
 ? ?//IE中阻止函數器默認動作的方式 ?
4
 ? ?window.event.returnValue = false; ?
5
  } 
6
 ?else{ 
7
 ? ?//阻止默認瀏覽器動作(W3C) ?
8
 ? ?e.preventDefault(); 
9
  } ?
10
} 
這種是兼容性寫法,但是如果你只需要支持高版本瀏覽器的話,那么如上文一樣,一句話即可。
btn.onclick = function (){ return false; 
}
1
1
btn.onclick = function (){ 
2
 ?return false; 
3
}



來自為知筆記(Wiz)


轉載于:https://www.cnblogs.com/zjx2011/p/8447510.html

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

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

相關文章

89. Gray Code - LeetCode

為什么80%的碼農都做不了架構師&#xff1f;>>> Question 89. Gray Code Solution 思路&#xff1a; n 0 0 n 1 0 1 n 2 00 01 10 11 n 3 000 001 010 011 100 101 110 111 Java實現&#xff1a; public List<Integer> grayCode(int n) {List&…

400. 第 N 位數字

400. 第 N 位數字 在無限的整數序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …中找到第 n 位數字。 注意&#xff1a;n 是正數且在 32 位整數范圍內&#xff08;n < 231&#xff09;。 示例 1&#xff1a; 輸入&#xff1a;3 輸出&#xff1a;3 示例 2&#xff1a; 輸入&…

1.初識Linux

1.Linux 區分大小寫 2.shell命令行-bash 進入終端->[stulocalhost~]$ (其中,Stu為登錄用戶名&#xff0c;localhost為登錄主機名&#xff0c;’~’ 表示當前用戶正處在stu用戶的家目錄中, 普通用戶的提示符以$結尾&#xff0c;而根用戶以’#’結尾) 3.Linux中所謂的命令(…

這份NLP研究進展匯總請收好,GitHub連續3天最火的都是它

最近&#xff0c;有一份自然語言處理 (NLP) 進展合輯&#xff0c;一發布就受到了同性交友網站用戶的瘋狂標星&#xff0c;已經連續3天高居GitHub熱門榜首位。 合集里面包括&#xff0c;20多種NLP任務前赴后繼的研究成果&#xff0c;以及用到的數據集。 這是來自愛爾蘭的Sebasti…

基于模型的嵌入式開發流程_如何使用基于模型的測試來改善工作流程

基于模型的嵌入式開發流程Unit testing is not enough – so lets start using model-based testing to improve our workflows.單元測試還不夠–因此&#xff0c;讓我們開始使用基于模型的測試來改善我們的工作流程。 Software testing is an important phase in building a …

166. 分數到小數

166. 分數到小數 給定兩個整數&#xff0c;分別表示分數的分子 numerator 和分母 denominator&#xff0c;以 字符串形式返回小數 。 如果小數部分為循環小數&#xff0c;則將循環的部分括在括號內。 如果存在多個答案&#xff0c;只需返回 任意一個 。 對于所有給定的輸入…

最近用.NET實現DHT爬蟲,全.NET實現

最近用.NET實現DHT爬蟲&#xff0c;全.NET實現&#xff0c;大家可以加我QQ交流下 309159808 轉載于:https://www.cnblogs.com/oshoh/p/9236186.html

C++貪吃蛇

動畫鏈接 GitHub鏈接&#xff1a;https://github.com/yanpeng1314/Snake 1 #include "Snake.h"2 3 int iScore 0;4 int iGrade 1;5 6 //蛇頭蛇尾初始位置7 int x_head 1, y_head 3;8 int x_tail 1, y_tail 1;9 10 //地圖坐標11 int i_Map 1, j_Map 1;12 13 /…

遠程辦公招聘_招聘遠程人才時要尋找的5種技能

遠程辦公招聘Remote work is a fast emerging segment of the labor market. How to embrace this shift as an employer - and find, recruit, and empower remote staff - is a question many companies and hiring managers are grappling with.遠程工作是勞動力市場中快速崛…

10分鐘騰訊云配置免費https

騰訊云免費證書申請地址&#xff1a; https://console.cloud.tencent... 填寫相關信息 域名身份驗證 文件驗證 將fileauth.text 創建在網站訪問根目錄的 .well-known/pki-validation/目錄使得 www.**.com/.well-known/pki-validation/fileauth.text 能夠訪問詳情 等待5分鐘左右…

1588. 所有奇數長度子數組的和

1588. 所有奇數長度子數組的和 給你一個正整數數組 arr &#xff0c;請你計算所有可能的奇數長度子數組的和。 子數組 定義為原數組中的一個連續子序列。 請你返回 arr 中 所有奇數長度子數組的和 。 示例 1&#xff1a; 輸入&#xff1a;arr [1,4,2,5,3] 輸出&#xff1…

洛谷P3195 [HNOI2008]玩具裝箱TOY(單調隊列優化DP)

題目描述 P教授要去看奧運&#xff0c;但是他舍不下他的玩具&#xff0c;于是他決定把所有的玩具運到北京。他使用自己的壓縮器進行壓縮&#xff0c;其可以將任意物品變成一堆&#xff0c;再放到一種特殊的一維容器中。P教授有編號為1...N的N件玩具&#xff0c;第i件玩具經過壓…

680. 驗證回文字符串 Ⅱ

680. 驗證回文字符串 Ⅱ 給定一個非空字符串 s&#xff0c;最多刪除一個字符。判斷是否能成為回文字符串。 示例 1: 輸入: s “aba” 輸出: true 示例 2: 輸入: s “abca” 輸出: true 解釋: 你可以刪除c字符。 示例 3: 輸入: s “abc” 輸出: false 解題思路 使用…

Android--RxJava2更新體驗

截止日前最新版2017-3-15: RxJava compile ‘io.reactivex:rxjava:1.2.7’ compile ‘io.reactivex:rxandroid:1.2.1’ RxJava2 compile “io.reactivex.rxjava2:rxjava:2.0.7” compile “io.reactivex.rxjava2:rxandroid:2.0.1” 1:create操作改變 Rxjava CompositeSubscri…

kotlin和java語言_Kotlin VS Java – 2020年您應該學習哪種編程語言?

kotlin和java語言It has been several years since Kotlin came out, and it has been doing well. Since it was created specifically to replace Java, Kotlin has naturally been compared with Java in many respects.自Kotlin問世以來已經有好幾年了&#xff0c;而且一切…

oracle部署--安裝oracle軟件與部署單實例數據庫

一、安裝oracle數據庫軟件 1.創建相應的用戶組及用戶 groupadd oinstall groupadd oper groupadd dba useradd -g oinstall -G oper,dba oracle 2.創建oracle software安裝路徑 mkdir -p /u01/app/oracle/product/11.2.0/db_1 3.修改安裝路徑權限 chown -R oracle:oinstall …

web前端【第十一篇】jQuery屬性相關操作

知識點總結 1、屬性 屬性&#xff08;如果你的選擇器選出了多個對象&#xff0c;那么默認只會返回出第一個屬性&#xff09;、 attr(屬性名|屬性值) - 一個參數是獲取屬性的值&#xff0c;兩個參數是設置屬性值 - 點擊加載圖片示例 re…

528. 按權重隨機選擇

528. 按權重隨機選擇 給定一個正整數數組 w &#xff0c;其中 w[i] 代表下標 i 的權重&#xff08;下標從 0 開始&#xff09;&#xff0c;請寫一個函數 pickIndex &#xff0c;它可以隨機地獲取下標 i&#xff0c;選取下標 i 的概率與 w[i] 成正比。 例如&#xff0c;對于 w…

sql語句語法多表關聯_SQL創建表語句-帶有示例語法

sql語句語法多表關聯SQL is one of the most reliable and straightforward querying languages around. It provides clear cut syntax that reads easily without abstracting away too much of the functionalitys meaning.SQL是最可靠&#xff0c;最直接的查詢語言之一。 它…

分布式改造劇集三:Ehcache分布式改造

第三集&#xff1a;分布式Ehcache緩存改造 前言 ? 好久沒有寫博客了&#xff0c;大有半途而廢的趨勢。忙不是借口&#xff0c;這個好習慣還是要繼續堅持。前面我承諾的第一期的DIY分布式&#xff0c;是時候上終篇了---DIY分布式緩存。 探索之路 ? 在前面的文章中&#xff0c;…