js事件處理、事件對象

事件類型分類:

1 添加在html結構中的事件

<div id="div1" onclick="alert('append click event in html')"> </div>

點擊div1之后彈出 append click event in html;其實在html結構中添加的事件也屬于dom0級事件。

2 dom0級事件處理

<div id="div1"> </div>
<script>var dom1 = document.getElementById('div1');dom1.onclick = function(){alert(' first dom0 ')};dom1.onclick = function(){alert(' second dom0 ')};
</script>

點擊div1之后只彈出 second dom0;說明dom0級事件后面賦值的事件會覆蓋掉前面的

如果在div中在加 onclick="alert('append click event in html'), 代碼如下:

<div id="div1" onclick="alert('append click event in html')"> </div>
<script>var dom1 = document.getElementById('div1');dom1.onclick = function(){alert(' first dom0 ')};dom1.onclick = function(){alert(' second dom0 ')};
</script>

點擊div后 仍然只彈出second dom0, 說明在html中添加的點擊事件處理程序也被覆蓋。

實際上 dom1.onclick 等價于html結構中div標簽中的οnclick=""; 可以把onclick看成dom元素對象的一個屬性 dom1{ id:"1", onclick:function(){ ... } }

3 dom2級事件處理

dom.addEventListener(“事件名”,“事件處理程序”,“布爾值”)

布爾值表示該事件的響應順序,默認值為false。

true:事件捕獲:表示在捕獲階段調用事件處理程序。
false:事件冒泡:表示在冒泡階段調用事件處理程序。
事件傳遞有兩種方式:冒泡與捕獲。
事件傳遞定義了元素事件觸發的順序。 如果你將 <p> 元素插入到 <div> 元素中,用戶點擊 <p> 元素, 哪個元素的 "click" 事件先被觸發呢?
在 冒泡 中,內部元素的事件會先被觸發,然后再觸發外部元素,即: <p> 元素的點擊事件先觸發,然后會觸發 <div> 元素的點擊事件。
在 捕獲 中,外部元素的事件會先被觸發,然后才會觸發內部元素的事件,即: <div> 元素的點擊事件先觸發 ,然后再觸發 <p> 元素的點擊事件。
關于事件冒泡和捕獲在后面再舉出實例代碼。
使用addEventListener添加事件不會被覆蓋也不會覆蓋dom0級事件,如下:
<div id="div1" onclick="alert('append click event in html')"> </div>
<script>var dom1 = document.getElementById('div1');var handle = function () {alert('dom2 event handle');};dom1.onclick = function(){alert(' first dom0 ')};dom1.onclick = function(){alert(' second dom0 ')};dom1.addEventListener("click", function(){alert(' first dom2 ')}, false);dom1.addEventListener("click", handle, false);
</script>
點擊div1時彈出 second dom0first dom2 、dom2 event handle ,dom0級綁定的最后一個事件覆蓋了前面所有的dom0級事件,而綁定的兩個dom2級事件都存在,并且先執行dom0級事件在執行dom2級事件。
?
使用removeEventListener移除事件,傳入的參數與添加處理程序時addEventListener使用的參數相同。
這也意味著事件處理程序為匿名函數的無法移除,如下所示:
<div> </div>
<script>var dom1 = document.getElementById('div1');var handle = function () {alert('event handle');};dom1.addEventListener("click", function(){alert(' first dom2 ')}, false);dom1.addEventListener("click", function(){alert(' second dom2 ')}, false);dom1.addEventListener("click", handle, false);dom1.removeEventListener("click", handle, false);
    dom1.removeEventListener("click", function(){alert(' second dom2 ')}, false);
</script>

點擊div1依次彈出 first dom2 second dom2

關于事件冒泡和捕獲的代碼實例:

<div id="div1"><div id="div2"><div id="div3"><div id="div4"></div></div></div></div>
<script>var html = document.getElementsByTagName('html')[0];var body = document.getElementsByTagName('body')[0];var dom1 = document.getElementById('div1');var dom2 = document.getElementById('div2');var dom3 = document.getElementById('div3');var dom4 = document.getElementById('div4');window.addEventListener("click", function(){alert('window')}, false);document.addEventListener("click", function(){alert('document')}, true);html.addEventListener("click", function(){alert('html')}, false);body.addEventListener("click", function(){alert('body')}, true);dom1.addEventListener("click", function(){alert('div1')}, false);dom2.addEventListener("click", function(){alert('div2')}, true);dom3.addEventListener("click", function(){alert('div3')}, false);dom4.addEventListener("click", function(){alert('div4')}, false);// addEventListen 添加的第三個參數true則是事件捕獲,不添加或false則為事件冒泡, 由事件源dom4元素 --> 父元素dom3 --> 爺爺元素dom2 --> ... --> body --> html --> document --> window  執行事件處理程序// 若從事件源dom4元素到window 有存在事件捕獲的綁定事件 ,則事件從window到事件源dom4 依次執行完設置為true的捕獲事件 在從事件源dom到window執行完其他未設置為true的冒泡事件。//如上述代碼 依次彈出 document body div2 div4 div3 div1 html window
</script>

注意:IE8及更早IE版本,Opera7.0及其更早版本不支持 addEventListener() 和 removeEventListener() 方法。

對于這類瀏覽器版本可以使用 attachEvent() 方法來添加事件,detachEvent() 方法來移除事件句柄

?
事件對象:在觸發dom事件的時候都會產生一個事件對象
?
事件對象event:
1) type:獲取事件類型
2) target:獲取事件目標
3) stopPropagation():阻止事件冒泡
4) preventDefault():阻止事件默認行為
<div id="div1"> </div>
<script>var dom1 = document.getElementById('div1');dom1.addEventListener("click",function(event){console.log(event.type);console.log(event.target)})
</script>
?console.log 輸出: click , <div id="div1"> </div>
<div><a></a></div>
<script>dom_div.addEventListener("click",fun_div)dom_a.addEventListener("click",fun_a)
</script>
點擊a時觸發fun_a 由于事件冒泡再觸發fun_div ?
在fun_a的末尾添加event.stopPropagation():阻止事件冒泡 則div中的click事件fun_div無效
?
<a href="http://www.baidu.com"></a>
dom_1.addEventListener("click",function(event){}) 點擊之后a會跳轉到百度 在回調函數function中添加event.preventDefault();阻止事件默認行為 點擊之后不會跳轉
?

轉載于:https://www.cnblogs.com/peakleo/p/6090385.html

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

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

相關文章

手機技巧:手機只剩20%電量?有了這幾招,多用2小時

如今越來越多的小伙伴在旅途中和上班路上 免不了要用手機打發時間 看直播、打游戲、聽音樂 有了手機&#xff0c;仿佛就有了全世界 可是&#xff0c;手機的電不夠用怎么辦&#xff1f; 不怕&#xff01; 今天小編為您送上 最強省電攻略和充電指南&#xff01; 省電攻略 iphone篇…

網絡知識:電腦無線網連接不上問題匯總

在使用電腦的時候&#xff0c;有時候電腦可能連接不上無線網絡。那么電腦無線網絡連接不上怎么辦呢?下面就讓小編來告訴大家吧&#xff0c;歡迎閱讀。 第一步&#xff1a;應檢查無線網卡的驅動是否安裝正確。 右鍵點擊“我的電腦”-屬性-硬件-設備管理器&#xff0c;查看是否存…

小W計樹

排列組合思想. 先跑一遍最短路, 再從1節點開始搜索, 假如搜到一個點的路徑長度等于最短路, 則記錄到達該點的路徑數 1. 最后遍歷一遍, ans * rec[i] 輸出答案即可. 關鍵在于想到這個排列組合的思想. #include<cstdio> #include<cstring> #include<algorith…

java jsonp 接口_jsonp使用,spring4.x對jsonp的支持

1.java中接口RequestMapping("/token/{token}")ResponseBodypublic Object getUserByToken(PathVariable String token,String callback) {Person per null;try {per userService.getPerson(token);} catch (Exception e) {e.printStackTrace();per ExceptionUtil…

CPU知識:主頻、核心、線程、緩存、架構

我們都說CPU相當于人類的大腦&#xff0c;在日常生活中&#xff0c;人腦是術業有專攻&#xff0c;有人天生適合搞藝術&#xff0c;有人天生適合搞科學。CPU作為計算機的大腦&#xff0c;其實也是這樣的。下面就帶大家了解一下CPU知識以及怎么選擇合適的CPU。 CPU有幾個重要的參…

@SpringBootTest注解進行單元測試無法運行

1&#xff1a;用idea新建一個項目 2:在測試類下建一個方法&#xff0c;發現方法沒法運行 查看資料之后發現是需要在對應的方面名稱前面和類名前面加上public修飾符即可&#xff0c;需要測試那個方法執行哪個方法就行 3:加了 public發現可以運行了

java如何改注釋_關于Java:更改字符串值的注釋

在spring或java中是否有注釋可以轉換給定的字符串&#xff1f;例如&#xff0c;Spring具有注釋Value(" some string")。 如果我想為該字符串分配一個轉換后的值&#xff0c;而不是向參數/實例變量分配"某些字符串"怎么辦&#xff1f; 假設字符串為" f…

視頻接口:DP接口和HDMI接口介紹,看完你就懂了

目錄 一、DP接口 二、HDMI接口 三、總結 1、技術支持的不同 2、帶寬支持的不同 3、廠商制作成本的不同 電腦顯示器高清傳輸通過會用到兩個接口&#xff0c;就是DP接口和HDMI接口&#xff0c;今天電腦學習小編帶大家對比一下這兩個接口。 一、DP接口 DisplayPort縮寫DP&#xff…

區間型DP

區間型DP是一類經典的動態規劃問題&#xff0c;主要特征是可以先將大區間拆分成小區間求解最后由小區間的解得到大區間的解。 有三道例題 一、石子合并 在一個圓形操場的四周擺放N堆石子,現要將石子有次序地合并成一堆.規定每次只能選相鄰的2堆合并成新的一堆&#xff0c;并將新…

后端:MyBatis緩存知識介紹

今天給大家分享一下MyBatis緩存知識介紹&#xff0c;希望對大家日常的開發當中能有所幫助&#xff01;一、MyBatis一級緩存1、一級緩存介紹當我們的程序MyBatis開啟一次和數據庫的會話&#xff0c;MyBatis會自動創建出一個SqlSession對象表示這一次數據庫的會話。在同一個數據庫…

軟件:10款免費無廣告的看圖軟件,總有一款適合你

目錄 一、專業型看圖軟件 1.Windows照片 2.Honeyview 3.EzViewer 4.XnView MP 5.JPEGView 6.Irfan View 二、綜合型文件查看 1.Quicklook 2.愛奇藝萬能聯播 3.WPS圖片 4.谷歌瀏覽器 一、專業型看圖軟件 1.Windows照片 Windows自帶的照片應用就是一款比較強大的看圖軟件&#xf…

機器學習的簡單邏輯回歸的Advanced Optimization

Learning Course: One variable logistic regression optimization 單變量&#xff08;只有一個特征&#xff09;的用于分類的邏輯回歸的cost function的最小值求解, here: x[x1;x2]; y{0,1}; theta[theta(1);theta(2)] 由于分類中的y值需為0-1之間的數值&#xff0c;因此這里的…

java float f1=0.5_Java Math類靜態float copySign(float f1,float f2)與示例

數學類float copySign(float f1&#xff0c;float f2)此方法在java.lang包中可用。此方法用于返回第一個浮點參數以及第二個浮點參數的符號。這是一個靜態方法&#xff0c;因此也可以使用類名進行訪問。在此方法中&#xff0c;我們傳遞了兩個參數作為參數&#xff1a;第一個參數…

Sentinel介紹與使用

一、Sentinel簡介 Sentinel是阿里開源的項目&#xff0c;提供了流量控制、熔斷降級、系統負載保護等多個維度來保障服務之間的穩定性。 二&#xff1a;Sentinel 功能和設計理念 流量控制 流量控制在網絡傳輸中是一個常用的概念&#xff0c;它用于調整網絡包的發送數據。然而…

電腦知識:BIOS和UEFI的對比介紹

??作者主頁&#xff1a;IT技術分享社區 ??作者簡介&#xff1a;大家好,我是IT技術分享社區的博主&#xff0c;從事C#、Java開發九年&#xff0c;對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽&#xff1a; 數據庫領域優質創作者&#x1f3c6;&#x…

緩存更新的套路

看到好些人在寫更新緩存數據代碼時&#xff0c;先刪除緩存&#xff0c;然后再更新數據庫&#xff0c;而后續的操作會把數據再裝載的緩存中。然而&#xff0c;這個是邏輯是錯誤的。試想&#xff0c;兩個并發操作&#xff0c;一個是更新操作&#xff0c;另一個是查詢操作&#xf…

怎樣獲取當前頁面值php,想要得到當前頁面的所有url參數信息怎么用PHP來實現?...

本篇文章主要給大家介紹怎么使用php獲取完整url。首先給新手小白們簡單介紹下什么是url。百度百科上是這么解說的&#xff0c;統一資源定位符是對可以從互聯網上得到的資源的位置和訪問方法的一種簡潔的表示&#xff0c;是互聯網上標準資源的地址。互聯網上的每個文件都有一個唯…

@PostConstruct注解學習,最詳細的分享教程

該注解可以實現在運行工程時&#xff0c;自動運行該注解下的方法&#xff1b; PostConstruct是java自帶的注解&#xff0c;指的是在項目啟動的時候執行這個方法&#xff0c;也可以理解為在spring容器啟動的時候執行&#xff0c;可作為一些數據的常規化加載&#xff0c;比如數據…

電腦知識:分享實用的電腦維護小常識

目錄 常識1&#xff1a;杜絕直接拔電腦電源強行關機 常識2&#xff1a;不要用電池玩游戲 常識3&#xff1a;開不了機可以嘗試插拔內存條 常識4&#xff1a;電腦散熱的處理方法 常識5&#xff1a;避免在電腦工作時拔插頭 今天小編就為大家帶來一些電腦日常實用中的維護小知識&am…