2013-10-01 67 views
27

我正在jquery中学习事件。在实施它们时我遇到了疑问。 mousedown()和click()事件有什么区别。我应该在什么条件下使用哪个事件?mousedown和点击jquery之间的区别

例如: 这两个事件下面的代码执行同样的任务:

$("#p1").mousedown(function(){ 
    alert("Mouse down over p1!"); 
}); 


$("#p1").click(function(){ 
    alert("Mouse down over p1!"); 
}); 

两个执行same.Can有人澄清的差异。如果相同,我应该选择哪个?

+2

考虑'拖动'的情况,你会得到你的答案。 –

+0

同意Gupta。例如:放置2个按钮1在Click上有警报,2在mousedown上有警报。将鼠标放在每个上并拖动光标并放开。鼠标按下 - 将触发,点击 - 不会 – Cheese

回答

34

onMouseDown将触发。同样,当任何按钮被释放时,onMouseUp将会触发。 onMouseDown即使在对象上单击鼠标时也会触发,但如果在其他位置单击并按住该按钮,则会触发onMouseUp,然后将其释放到对象上方。当按下和在同一对象上释放鼠标左键

onClick才会触发。如果您关心的是订单,如果同一个对象设置了所有3个事件,则为onMouseDown,onMouseUp,然后onClick。每个甚至应该只触发一次。

详情:

http://api.jquery.com/click/
http://api.jquery.com/mouseup/
http://api.jquery.com/mousedown/

SourceAnton Baksheiev

+3

这些URL是指jQuery,而'onClick','onMouseUp'和'OnMouseDown'实际上不是jQuery事件,而是JavaScript事件。我认为最好链接到[在这种情况下的w3c规范。](http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-eventgroupings-mouseevents)(向下滚动有点在链接的页面上) –

+0

但是,如果我们在同一个元素上绑定click和mousedown事件。 mousedown事件总是触发而不是点击。为什么会这样发生。如果我们同时需要鼠标和点击,我们该怎么做。 看到这个jsfiddle http://jsfiddle.net/a74k92dd/ – Arvin

+0

http://jsfiddle.net/wBfbm/37/测试 – hlcs

11

当按下鼠标按键mousedown事件被触发,但它发布之前。

click事件在mousedownmouseup事件之后被触发。当按下左或右(或中间)

+0

如果在同一个elemtn上发生mousedown和mouseup事件,您还应该提及'click'事件触发。 –

1

$(element).click()火灾,当你鼠标按钮,然后松开它。

$(element).mousedown()火灾,然后按下鼠标按钮。

抱着尝试过该按钮被点击的按钮,然后在这里释放:http://jsfiddle.net/n9rJ9/

0

有许多的鼠标按下,mouseup和鼠标点击,再加上其他一些鼠标点击相关的事件。

只要鼠标在进程中没有移动,mouseClick事件通常在mouseDown后面紧跟着一个mouseUp。

1

他们没有。您可能会这样认为,因为您将两个事件处理程序绑定在同一个元素上,所以在发生点击事件之前,mousedown将始终启动。

如果你将它们绑定到不同的元素上,你将会看到mousdown总是会在没有释放的情况下按下按钮(任何鼠标按钮)而触发,点击后会释放鼠标左键(主) 。

看到这个小的jsfiddle:当按下左或右(或中间)http://jsfiddle.net/wBfbm/

$("#p1").mousedown(function(){ 
    alert("Mouse down over p1!"); 
}); 


$("#p2").click(function(){ 
    alert("Mouse down over p1!"); 
}); 
1

onMouseDown将触发。当按下和在同一对象上释放鼠标左键

onClick才会触发。

1

试试这种方法。因为event.stopPropagation不会停止鼠标向下的单击事件事件。鼠标向下和点击事件不相互关联。

var mousedDownFired = false; 

    $("#id").mousedown(function(event){ 
     mousedDownFired =true; 
     //code 
    }); 

    $("#id").click(function(event){ 
    if(mousedDownFired) 
     { 
     mousedDownFired = false; 
     return; 
     } 
     //code 
}); 

更新时间:

NO。鼠标事件被触发像这样

1)的MouseDown

2)点击

3)的MouseUp

如果按下鼠标触发,然后标志将后鼠标按下事件单击启用将触发。在这个点击事件将会禁用标志变量。这将以循环方式工作。不会考虑两个鼠标向下或两个点击

+2

那么这只是明显错误的。你需要更新这个帖子,以便它有正确的信息。您可以清楚地看到这个codepen的顺序是mousedown,mouseup,请点击:https://codepen.io/mudassir0909/pen/eIHqB – kamelkev

+0

顺序可能因使用的浏览器而异。我没有在浏览器上测试过它。但是,在我对Chrome中处理的事件的观察中,按照mousedown,mouseup的顺序触发事件,然后单击。 – BrightIntelDusk

+0

所有浏览器按顺序触发:mousedown,mouseup,click,不是此答案中所述的顺序。 – JonBrave

相关问题