91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

父元素<a>標簽的默認行為以及click事件之間有什么相互關系

發布時間:2020-07-09 16:05:18 來源:億速云 閱讀:199 作者:Leah 欄目:web開發

本篇文章給大家分享的是有關父元素<a>標簽的默認行為以及click事件之間有什么相互關系,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

開發過程中遇到問題,簡單寫個demo   運行環境為Chrome 68

描述一下這個問題,當a標簽內部存在嵌套時, 父元素a標簽的href默認行為以及子元素綁定的click事件的響應之間存在影響。頁面結構:

<!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標簽內部點擊事件失效</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)">父標簽
        <span class="child-one">
            子標簽1
        </span>
        <object>
            <a class="child-two" href="child-two">
                子標簽2
            </a>
        </object>
        <object>
            <a class="child-three" href="javascript:alert('href:child-three')">
                子標簽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標簽嵌套,瀏覽器解析錯誤,所以用object標簽包裹了一層)。

父元素<a>標簽的默認行為以及click事件之間有什么相互關系

執行操作:

  1. 當點擊父標簽時,先彈出111,然后跳轉父標簽的href鏈接。
    說明onclick執行先于href

  2. 當點擊child-one時,執行元素綁定的click事件,會彈出alert,但是location仍然跳轉到了father。
    阻止冒泡后,執行結果仍然不符合預期。添加preventDefault之后,執行了子元素自己的跳轉。

  3. 當點擊child-two時,彈出響應信息,然后會跳轉href的鏈接。

  4. 當點擊child-three時,先彈出click child-three,然后是href child-three,說明click事件先于href執行。

上面4個操作除了2之外都很好理解,2中,為什么已經在阻止了事件冒泡之后,仍然執行了父元素中href的跳轉。

思考:

首先可以肯定的是,事件冒泡確實被阻止了,因為父元素的onclick并沒有執行。
所以猜測,<a>標簽的默認行為是無法通過取消冒泡來阻止的,就算事件沒有冒泡到父元素,子元素在父元素<a>標簽內部,仍然會執行<a>標簽默認行為。

解決方法:

在子元素中添加e.preventDefault()阻止默認行為

父元素不使用<a>標簽,使用其他標簽綁定click事件且子元素阻止冒泡

父元素不使用href屬性,直接在<a>標簽上綁定click事件

相關文章推薦:

link標簽鏈接CSS和@import加載有什么區別?

HTML標簽:img標簽的用法總結

以上就是父元素<a>標簽的默認行為以及click事件之間有什么相互關系,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

孟津县| 陕西省| 乐平市| 丁青县| 武强县| 沭阳县| 侯马市| 喜德县| 武宣县| 巴彦淖尔市| 苗栗市| 丘北县| 黑河市| 岑巩县| 吉林市| 凌云县| 日照市| 汉阴县| 朔州市| 星子县| 临沭县| 织金县| 威远县| 阿拉善右旗| 仁化县| 万盛区| 上林县| 县级市| 新源县| 泾阳县| 古蔺县| 义马市| 信宜市| 交城县| 玛沁县| 墨竹工卡县| 秦安县| 钟祥市| 婺源县| 临西县| 静宁县|