父元素<a>标签的默认行为以及click事件之间有什么相互关系

本篇文章给大家分享的是有关父元素<a>标签的默认行为以及click事件之间有什么相互关系,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

10年积累的成都网站建设、成都做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有西工免费网站建设让你可以放心的选择与我们合作。

开发过程中遇到问题,简单写个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事件之间有什么相互关系,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。

分享题目:父元素<a>标签的默认行为以及click事件之间有什么相互关系
网页URL:https://www.cdcxhl.com/article20/ghhdco.html

成都网站建设公司_创新互联,为您提供营销型网站建设自适应网站关键词优化小程序开发建站公司定制开发

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都网站建设