a标签的默认事件和脚本事件的执行顺序

最近看到朋友圈的一位朋友圈发了一个技术的段子,朋友圈的大概内容已被友人删掉,找不回原图,段子大概如下:

<a href="javascript:alert('已清除');">清空</a>

底下的评论都在开喷说,那是他们看过最屌的代码,嘲笑说公司外包人员写的代码的质量。

于是我在想,那么这段代码和脚本代码结合起来到底有没有效果呢?我自己做了个demo实验了一下。

<body>

    <a href="javascript:console.log('5');" id="app">click</a>


    <script>
        var a = document.getElementById('app');

        a.onclick = function (e) {
            console.log('1');
            console.log('2');
            
            window.fetch('/demo.js').then(function (res) {

            },function(err){
                alert('4');
            });
            console.log('3');
        }

    </script>
</body>

好了,这些log可以很好的帮助我们看看脚本的监听click事件和href里的事件执行顺序是如何的。

  • 第一步:三个console.log(),是同步事件

  • 第二步:fetch是一个异步事件,由于跨域问题,直接打印失败的代码log(‘4’)

  • 第三步:在fetch这个异步里面,故意alert一个阻塞住它

  • 第四步:最后执行默认的事件

最后控制台输出如下:

clipboard.png

clipboard.png

所以就算是在href中直接写默认事件是如何执行的,并不一定是假弹窗在朋友圈例子中,有可能在脚本里面执行了其他代码,最后才执行默认事件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值