所以我的问题是如何处理jQuery鼠标事件。如果我错了,请纠正我,但以下事件按此顺序发生:
.mouseDown
.click
.mouseUp
我的问题是.click
等待.mouseDown
在默认调用之前完成运行吗?如果没有,是否有像.promise
这样的动画强迫.click
等待?
编辑#1
很多这些回复都涉及到我的问题,但我想知道的是.click
是否等待.mouseDown
在.click
的代码开始运行之前完全运行?因为,它保证这样做,或者如果我必须编写逻辑来确保这一点。
答案 0 :(得分:2)
它与jQuery无关,它是如何在javaScript中定义事件的。
click
事件是mousedown
,后面是同一元素上的mouseup
。
换句话说,当按下鼠标按钮时,mousedown
事件会先触发,然后释放按钮时会触发mouseup
事件,如果它们都触发了相同的元素,{ {1}}事件触发。
你可以轻松测试这个 - > http://jsfiddle.net/4EUPm/
修改强>
编辑#1很多这些回复都在触及我的问题,但是 我想知道的是.click会等待.mouseDown 在.click的代码开始运行之前完全运行?如 在,它保证这样做,或者如果我必须写逻辑来确保 这一点。
Javascript只有一个线程,所以两个函数不能同时执行,除了少数例外,比如异步方法。
此外,click
等待click
和mousedown
,然后检查这两者是否看到目标是相同的元素,所以是的,{{1}事件处理程序在mouseup
和 click
事件被触发之后才能触发,这是不可能的。
mousedown
事件处理程序中的每一段代码是否在mouseup
事件处理程序被触发之前完成,如果不确切知道这些事件处理程序中的内容,则无法回答,但通常 all mousedown
事件处理程序中的代码将在click
事件处理程序中的代码启动之前完成,除非出现异步行为或其他异常情况。< / p>
答案 1 :(得分:0)
订单已关闭,向上,单击。如果您需要在mousedown中执行延迟命令并且想要触发第二个命令(如果同时触发click事件),您可以执行以下操作:
var clicked = 0;
$('#test').on('mousedown',function() {
//do animation stuff onmouse down
if(clicked)
{
//do animation stuff onclick
clicked = 0;
}
});
$('#test').on('click',function() {
clicked = 1;
});