2012-05-24 3 views
7

Возможно ли, чтобы jQuery предотвращал выполнение события click из одного и того же элемента после того, как событие mousedown & только что было запущено.Предотвратить событие клика после события mousedown & mouseup

Любая помощь/примеры будут оценены.

+1

Я не реально получить, но 'mousedown' сопровождаемый' mouseup' бы щелчок, и просто щелчок работу один раз, есть 'один () 'метод? – adeneo

+0

может вам это помочь http://stackoverflow.com/questions/8875070/stopping-propagation-of-mousedown-mouseup-from-a-click-handler –

ответ

-4

Да, это должно быть возможно, если вы используете return false; в обработчике mouseup, потому что onclick запускается после того, как мышь и мышь произошли. Это возможно в обычном javascript, поэтому он должен работать с обработчиками событий jquery.

EDIT:

Возвращаясь логическое значение из обработчика событий на самом деле должно быть достаточно для потребления событий. Однако, так как это очень слоеное во всех браузерах вы должны использовать эту функцию для отмены вручную бульканье события:

event.stopPropagation(); 

где событие является параметром обработчик событий получает.

+1

Я просто пробовал это в jsfiddle и, похоже, не работал. .. –

+0

попробовали, и похоже, что это не работает – Elliot

+0

При этом случае могут возникнуть проблемы с обоими событиями на одном элементе. Можете ли вы сказать мне, что именно вы пытаетесь выполнить, тогда я могу предложить обходное решение. – chucktator

0

В Chrome и Internet Explorer, а не в Firefox, однако, отсоединение и повторное подключение элемента в mousedown или mouseup предотвратит запуск события click. В Internet Explorer этот трюк не делает двойных щелчков, хотя (в Chrome он делает).

Но я не стал бы полагаться на это странное поведение, кто знает, не изменится ли он в какой-то момент. Кроме того, будьте осторожны, что отсоединение и повторная привязка также могут иметь побочные эффекты для детей отдельного элемента (перезагрузка iframes, сброс полей файла, ...).

0

Существует неудобный подход, который заключается в том, чтобы отключить кнопку при запуске мыши и включить ее через короткий период, например, 100 мс. Если в этот период произойдет 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>

Смежные вопросы