JQuery鼠标事件

时间:2014-03-04 14:48:02

标签: jquery events

所以我的问题是如何处理jQuery鼠标事件。如果我错了,请纠正我,但以下事件按此顺序发生:

.mouseDown
.click
.mouseUp

我的问题是.click等待.mouseDown在默认调用之前完成运行吗?如果没有,是否有像.promise这样的动画强迫.click等待?

编辑#1 很多这些回复都涉及到我的问题,但我想知道的是.click是否等待.mouseDown.click的代码开始运行之前完全运行?因为,它保证这样做,或者如果我必须编写逻辑来确保这一点。

2 个答案:

答案 0 :(得分:2)

它与jQuery无关,它是如何在javaScript中定义事件的。

click事件是mousedown,后面是同一元素上的mouseup

换句话说,当按下鼠标按钮时,mousedown事件会先触发,然后释放按钮时会触发mouseup事件,如果它们都触发了相同的元素,{ {1}}事件触发。

你可以轻松测试这个 - > http://jsfiddle.net/4EUPm/

修改

  

编辑#1很多这些回复都在触及我的问题,但是   我想知道的是.click会等待.mouseDown   在.click的代码开始运行之前完全运行?如   在,它保证这样做,或者如果我必须写逻辑来确保   这一点。

Javascript只有一个线程,所以两个函数不能同时执行,除了少数例外,比如异步方法。

此外,click等待clickmousedown,然后检查这两者是否看到目标是相同的元素,所以是的,{{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;
});