onclick()问题

onclick()问题

<div class="outer">

     <div class="inner">

    </div>

</div>

js代码:

$(".outer").on("click", function(){

    console.log("outer");

    Promise.resolve().then(function() {

        console.log('promise3');

    }).then(function() {

        console.log('promise4');

    });

    setTimeout(()=>console.log("222"),0);

})


$(".inner").on("click", function(){

    console.log("inner");

    Promise.resolve().then(function() {

        console.log('promise1');

    }).then(function() {

        console.log('promise2');

    });

    setTimeout(()=>console.log("111"),0);

})

发现在点击时输出为:

inner

promise1

promise2

 outer

promise3

promise4

111

222

这表明所inner触发的点击事件和执行outer的点击事件 是异步的。因为它们中间执行了job

执行这条语句:

$(".inner").trigger("click");

输出:

inner

outer

promise1

promise3

promise2

 promise4

111

222

这表明是点击事件以及冒泡行为都是同步触发的。

所以 js执行点击事件冒泡行为是同步的,鼠标点击冒泡行为是异步的,即一个一个添加到task队列上的?是这样吗?

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,非常抱歉之前的回复可能有些问题,同学理解的是对的。

1、click点击是异步的,有宏任务和微任务,按照顺序执行宏任务,遇到微任务需要执行完毕才能执行宏任务。

2、trigger触发是同步的,需要先执行完主线程的内容,然后再执行队列中的。

祝学习愉快!

好帮手慕星星 2020-02-20 11:07:00

同学你好,好像理解相反了。同步指的是执行完一个再执行另一个,异步指的是一起执行。

所以手动点击元素时是同步的,先执行完inner的点击事件,然后再冒泡执行outer的点击事件。通过trigger方法自动触发是异步的,inner和outer的点击事件一起执行,自己可以再理解下。

如果我的回答帮到了你,欢迎采纳,祝学习愉快~

  • 提问者 安在南风 #1
    但是他们的执行顺序是一样的,都是冒泡顺序,而且trigger触发是一个一个执行click,而不是点击时加入到task队列中。
    2020-02-20 14:07:11
  • 提问者 安在南风 #2
    手动点击的click之间有微任务的执行,trigger触发的没有,所以trigger触发应该为同步,它是一条线上执行完所有的click函数。
    2020-02-20 14:14:07
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师