2012-05-24 157 views
7

joupown & mouseup事件刚刚被触发后,jQuery是否有可能阻止同一元素上的点击事件被执行。mousedown&mouseup事件后,防止点击事件

任何帮助/例子,将不胜感激。

+1

我真的不明白,而是一个'mousedown'后跟一个'mouseup'将是一次点击,只是有一个点击一次的工作,还有的'一个( )'方法? – adeneo

+0

这可能会帮助你http://stackoverflow.com/questions/8875070/stopping-propagation-of-mousedown-mouseup-from-a-click-handler –

回答

-4

是的,如果您在mouseup处理程序中使用return false;,应该可以,因为onclick在mousedown和mouseup发生后被触发。这在常规javascript中是可行的,所以它也应该可以用于jquery事件处理程序。

编辑:

从事件处理程序返回一个布尔值实际上应该够了事件的消耗。其中,事件是事件处理程序接收参数

event.stopPropagation(); 

:但是,因为这是非常片状跨浏览器,你应该使用功能手动取消事件冒泡。

+1

我只是试过在jsfiddle,它似乎并没有工作。 .. –

+0

已经尝试过,它似乎也没有工作 – Elliot

+0

如果两个事件在同一元素上触发,则此方法可能存在问题。你能准确地告诉我你正在努力完成什么,然后我可以提供一种解决方法。 – chucktator

0

在Chrome和Internet Explorer中,不是Firefox,但在mousedown或mouseup时分离和重新附加元素将会阻止点击事件被触发。在Internet Explorer中,这个技巧并没有引起双击(在Chrome中它的确如此)。

但我不会依赖这种奇怪的行为,谁知道它是否会在某些时候不会改变。此外,请注意,分离和重新附加也会对分离元素的子项产生负面影响(iframe重新加载,文件字段重置,...)。

0

有一种尴尬的做法,就是在mousedown时禁用按钮,并在短时间后启用它,例如100ms。如果mouseup在这段时间发生,点击将不会被触发。

$('#btn').on('click', function() { 
 
    alert('clicked') 
 
}); 
 
$('#btn').on('mousedown', function() { 
 
    var btn = $(this); 
 
    btn.attr('disabled', 'disabled'); 
 
    setTimeout(function() { btn.removeAttr('disabled'); }, 100); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<body> 
 
<button id='btn'>Click me</button> 
 
</body>