jquery中的绑定鼠标点击事件,为什么先弹出提示框

Image
$("p").click(function(){

$(this).hide();
alert("hidden");

})
为什么用jquery为元素添加点击事件,不用回调函数,就会先弹出提示框,再执行隐藏函数,我不是很理解,可以解释一下回调函数的意义吗

阅读 4.5k
4 个回答

hide本身就是异步啊。当然是先有alert。

console.log(111111111111);
alert(1);
你先吧控制台打开再刷新,肯定是能看见打印结果的。你反过来写就看不见了,要关了弹出框才有。

$(this).hide依然是在alert前面执行的,只不过这个调用相当于是发送一个事件,告诉DOM渲染线程DOM需要更新,而DOM渲染线程和JS执行的线程是互斥的,即不能同时执行,只有当前JS线程中的Task执行完成后,DOM渲染线程才会执行。DOM渲染线程执行后,你才能发现页面上的元素被隐藏了。这个问题的关键点是,JS代码执行和DOM更新是分别在两个线程中进行的,且这两个线程无法同时执行。

$.hide()是异步的,要想实现你想要的功能,使用

$(this).css('display','none')

或者为其添加一个隐藏的类,例如

$(this).addClass('hidden')
$.when($(this).hide()).then(function( data, textStatus, jqXHR ) {
  alert("hidden");
});
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题