阻止事件冒泡現象

来源:https://www.cnblogs.com/Lzxgg-xl/archive/2019/01/11/10253431.html
-Advertisement-
Play Games

首先來解釋一下啥是事件冒泡現象 事件冒泡: 多個元素嵌套,有層次關係,這些元素都註冊了相同的事件,如果裡面的元素的出發了事件,外面的元素該事件也觸發 在這裡有必要強調一下 相同的事件 不一定完全相同 即 都是 點擊事件 或者 都是 滑鼠移入事件 來個例子 先寫出來這三個div的結構 再給他們寫好樣式 ...


首先來解釋一下啥是事件冒泡現象

事件冒泡:

多個元素嵌套,有層次關係,這些元素都註冊了相同的事件,如果裡面的元素的出發了事件,外面的元素該事件也觸發

在這裡有必要強調一下  相同的事件  不一定完全相同  即   都是 點擊事件  或者 都是 滑鼠移入事件

來個例子

<div class="at1" id = "1">
        <div class="at2" id = "2">
            <div class="at3" id = "3"></div>
        </div>
</div>

先寫出來這三個div的結構

再給他們寫好樣式

 1  .at1 {
 2             width: 300px;
 3             height: 300px;
 4             background-color: red;
 5         }
 6         .at2 {
 7             width: 200px;
 8             height: 200px;
 9             background-color: yellow;
10         }
11         .at3 {
12             width: 100px;
13             height: 100px;
14             background-color: pink;
15         }

即他們應該是如圖所示的結構

然後我們為這三個註冊點擊事件

1 my$("1").onclick = function () {
2         this.style.backgroundColor = "white";
3     }
4     my$("2").onclick = function () {
5         this.style.backgroundColor = "white";
6     }
7     my$("3").onclick = function () {
8         this.style.backgroundColor = "white";
9     }

然後這時候冒泡事件的表現呢  就是這樣

你點擊黃色的div那麼黃色和紅色 都會背景顏色變白   即:黃色的事件觸發 使得事件冒泡 導致紅色div事件觸發

你點擊粉色的div 那麼所有的div都會背景顏色變白   即:粉色的事件觸發使得事件冒泡 導致黃色div事件觸發 繼而導致紅色div觸發

 

我們該如何阻止事件冒泡呢?

首先我來說一下事件處理參數對象

這個對象呢  在事件處理的函數中可以驗證一下它的存在

你測完會發現  谷歌火狐都有這個事件處理參數對象    而 IE8是undefined  所以呢是ie 8 是不支持的

my$("3").onclick = function () {
        this.style.backgroundColor = "white";
    加一行代碼 就能驗證 consolo.log(arguments.lenth);
}
如果你點了div3 那麼控制台就會有一個 1 列印出來 說明這個事件處理參數對象是真實存在的

第一種瀏覽器 火狐瀏覽器中的阻止事件冒泡 當然這個谷歌也支持
阻止事件冒泡 是利用這個事件處理參數對象來進行的

我們要利用 所以就把參數傳進來

代碼如下
my$("3").onclick = function (e) {
   this.style.backgroundColor = "white";
  e.stopPropagation(); }
第二種瀏覽器  ie瀏覽器種的阻止事件冒泡 當然這個谷歌也支持

代碼如下
my$("3").onclick = function () {
this.style.backgroundColor = "white";
    window.event.cancelBubble = true; }
所以這個代碼會牽扯到相容的問題 我們最後把兩種封裝成一個相容代碼即可 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一般網上的方法: 但是上面的語法不會複製舊表的預設值、註釋、鍵和索引,因此想要完美的複製表結構就需要先找到舊表的sql語句,然後進行修改,在此記錄一下我在PL/SQL上進行的操作; 1. 打開PL/SQL並連接上資料庫(本地需配置tnsnames.ora文件); 2. 新建—命令視窗—ed 表名,以 ...
  • 資料庫版本:oracle11g 11.0.2.0.4 SQL> desc x$ksppi; Name Null? Type ADDR RAW(8) >記憶體地址 INDX NUMBER >序號 INST_ID NUMBER >instance number KSPPINM VARCHAR2(80) > ...
  • 監控 redis 執行命令 Intro 最近在用 redis 的時候想看看執行了哪些命令,於是發現了 redis cli 提供的 命令,直接使用這個就可以監控執行的大部分 redis 命令,之所以說是大部分,是因為有一些命令如: 出於安全原因是不會記錄的。 Monitor 是調試用的命令 Redis ...
  • MongoDB介紹 MongoDB是一個基於分散式文件存儲的開源文檔資料庫。由C++語言編寫。旨在為WEB應用提供高性能、高可用性和高伸縮數據存儲解決方案。 MongoDB優點 MongoDB使用場景 數據緩存 由於性能很高,MongoDB適合作為信息基礎設施的緩存層。在系統重啟之後,由MongoD ...
  • 一、oc代碼 提示:看本文章之前,最好按順序來看; //代碼 //列印 分析: 1)三個block的類型分別為:__NSGlobalBlock__、__NSMallocBlock__、__NSStackBlock__,什麼原因,往下看; 2)上述三種類型最終都是繼承自NSBlock,而NSBlock ...
  • 本文用來介紹 iOS 多線程中 GCD 的相關知識以及使用方法。這大概是史上最詳細、清晰的關於 GCD 的詳細講解+總結的文章了。通過本文,您將瞭解到: 1. GCD 簡介 2. GCD 任務和隊列 3. GCD 的使用步驟 4. GCD 的基本使用(6種不同組合區別) 5. GCD 線程間的通信 ...
  • 一,效果圖。 二,代碼。 參考資料:《菜鳥教程》 ...
  • h1{ /*文字陰影*/ font-size: 100px; text-shadow: 10px 3px 3px rgba(0,0,0,.5) ; } div{ /*盒子陰影*/ width: 200px; height: 200px; border: 10px solid #cccccc; /*b ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...