2012-05-24 124 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>