Jquery mousedown与click的区别

14
今天我发现了一些让我感到困惑的事情。我试图通过 jQuery 隐藏某些东西……首先,我尝试使用这个 < / p>。
$(".specificdiv li:nth-child(3)").click(function(){
    $(".anotherdiv").hide();
})

......但它并没有起作用。

一段时间后,我尝试了这种方式:

$(".specificdiv li:nth-child(3)").mousedown(function(){
    $(".anotherdiv").hide();
})

有人可以向我解释为什么mousedown起作用而不是click吗? 找到答案会很好

编辑

编辑了另一个div。


你能展示一下问题的上下文吗? - Eric Goncalves
假设这只是示例内容,但 $(".anotherdiv").hide();$(".another").hide(); 不同。 - David
发布相关的HTML代码。从我所看到的,两者都应该可以工作,除非你在没有松开鼠标的情况下拖动。基本上click = mousedown + mouseup - Selvakumar Arumugam
你把你的JS代码包裹在$(function(){ ... });里了吗? - Chris
1
jQuery 的本质不是像你所说的那样表现。这更多是一个上下文相关的问题。如果你能展示你的代码,我们就能提供帮助了。 - dlock
显示剩余3条评论
2个回答

22

可能的原因:

  1. mousedown 事件在 click 事件之前被执行,所以先到先得。
  2. 该元素可能已经有了一个 click 事件,这会防止它发生作用,比如函数首先被执行并且其中有一个 return false 语句。

现在由于您正在使用未分配给此元素的 mousedown 事件,所以它没有任何冲突。这个 可能是 一个原因,因为您没有发布完整的代码。请随时更正。 :)

还有一点需要注意,在第一个代码中您有 $(".anotherdiv").hide();,而在第二个代码中则有 $(".another").hide();,缺少类中的 div。这是一个问题吗?


即使元素具有另一个点击事件处理程序,它也应该触发两者。因此,这不是问题。此外,即使 mousedown 在点击之前执行,删除 mousedown 事件肯定会使点击事件正常触发。所以,我认为这不是原因。 - dlock
如果其他点击处理程序被首选,并且其中有一个“return false”语句怎么办?已在答案中更新 :) - Praveen Kumar Purushothaman
我认为可以通过在其他处理程序之前编写点击处理程序来优先考虑其执行。即使在第一个点击处理程序中返回 false,也不应该阻止其他处理程序的执行。 - dlock
1
@PraveenKumar:我认为第二个原因听起来非常好,因为还有其他的点击事件。我无法发布整个代码,因为这是工作相关的,而且我现在无法连接到我的沙盒。$(".another").hide()...实际上应该写成$(".anotherdiv").hide()。对于混淆感到抱歉。 - xhallix

1
实际上,mousedown事件在按下按钮时触发,即使您不松开按钮也是如此。单击类似于mouseup,当您将按钮松开时。
在您的代码中,您有:".anotherdiv"和".another"可能是您的错误吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接