本篇文章給大家分享的是有關(guān)父元素<a>標(biāo)簽的默認(rèn)行為以及click事件之間有什么相互關(guān)系,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
10年積累的成都網(wǎng)站建設(shè)、成都做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有西工免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
開發(fā)過程中遇到問題,簡單寫個(gè)demo 運(yùn)行環(huán)境為Chrome 68
描述一下這個(gè)問題,當(dāng)a標(biāo)簽內(nèi)部存在嵌套時(shí), 父元素a標(biāo)簽的href默認(rèn)行為以及子元素綁定的click事件的響應(yīng)之間存在影響。頁面結(jié)構(gòu):
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>a標(biāo)簽內(nèi)部點(diǎn)擊事件失效</title> <style> * { margin: 0; padding: 0; } .father { display: block; width: 500px; height: 200px; background-color: rgb(210, 111, 30); } .child-one { display: block; width: 200px; height: 50px; background-color: rgb(174, 43, 226); } .child-two { display: block; width: 200px; height: 50px; background-color: rgb(43, 226, 67); } .child-three { display: block; width: 200px; height: 50px; background-color: rgb(43, 137, 226); } </style> </head> <body> <a class="father" href="father" onclick="alert(111)">父標(biāo)簽 <span class="child-one"> 子標(biāo)簽1 </span> <object> <a class="child-two" href="child-two"> 子標(biāo)簽2 </a> </object> <object> <a class="child-three" href="javascript:alert('href:child-three')"> 子標(biāo)簽3 </a> </object> </a> <script> let father = document.querySelector('.father'); let ele1 = document.querySelector('.child-one'); let ele2 = document.querySelector('.child-two'); let ele3 = document.querySelector('.child-three'); ele1.addEventListener('click', function (e) { e.stopPropagation(); // e.preventDefault(); alert('click child-one') window.location.href = 'child-one' }, false) ele2.addEventListener('click', function (e) { e.stopPropagation(); alert('click child-two') // window.location.href='child-two' }, false) ele3.addEventListener('click', function (e) { alert('click child-three') window.location.href = 'child-three' }, false) father.addEventListener('click', function (e) { alert('click father') window.location.href = 'father' }, false) </script> </body> </html>
示例如下圖(如果a標(biāo)簽嵌套,瀏覽器解析錯(cuò)誤,所以用object標(biāo)簽包裹了一層)。
當(dāng)點(diǎn)擊父標(biāo)簽時(shí),先彈出111,然后跳轉(zhuǎn)父標(biāo)簽的href鏈接。
說明onclick執(zhí)行先于href
當(dāng)點(diǎn)擊child-one時(shí),執(zhí)行元素綁定的click事件,會(huì)彈出alert,但是location仍然跳轉(zhuǎn)到了father。
阻止冒泡后,執(zhí)行結(jié)果仍然不符合預(yù)期。添加preventDefault
之后,執(zhí)行了子元素自己的跳轉(zhuǎn)。
當(dāng)點(diǎn)擊child-two時(shí),彈出響應(yīng)信息,然后會(huì)跳轉(zhuǎn)href的鏈接。
當(dāng)點(diǎn)擊child-three時(shí),先彈出click child-three
,然后是href child-three
,說明click事件先于href執(zhí)行。
上面4個(gè)操作除了2之外都很好理解,2中,為什么已經(jīng)在阻止了事件冒泡之后,仍然執(zhí)行了父元素中href
的跳轉(zhuǎn)。
首先可以肯定的是,事件冒泡確實(shí)被阻止了,因?yàn)楦冈氐膐nclick并沒有執(zhí)行。
所以猜測,<a>標(biāo)簽的默認(rèn)行為是無法通過取消冒泡來阻止的,就算事件沒有冒泡到父元素,子元素在父元素<a>
標(biāo)簽內(nèi)部,仍然會(huì)執(zhí)行<a>
標(biāo)簽?zāi)J(rèn)行為。
在子元素中添加e.preventDefault()
阻止默認(rèn)行為
父元素不使用<a>
標(biāo)簽,使用其他標(biāo)簽綁定click事件且子元素阻止冒泡
父元素不使用href
屬性,直接在<a>
標(biāo)簽上綁定click事件
相關(guān)文章推薦:
link標(biāo)簽鏈接CSS和@import加載有什么區(qū)別?
HTML標(biāo)簽:img標(biāo)簽的用法總結(jié)
以上就是父元素<a>標(biāo)簽的默認(rèn)行為以及click事件之間有什么相互關(guān)系,小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
分享題目:父元素<a>標(biāo)簽的默認(rèn)行為以及click事件之間有什么相互關(guān)系
網(wǎng)頁URL:http://jinyejixie.com/article20/ghhdco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、關(guān)鍵詞優(yōu)化、小程序開發(fā)、建站公司、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)