2012-05-24 14 views
7

¿Es posible con jQuery evitar que se ejecute un evento de clic en el mismo elemento, después de que se desactivó un mousedown &?Prevenir evento de clic después del evento de mousedown y mouseup

Cualquier ayuda/ejemplos sería apreciada.

+1

Realmente no entiendo, pero un 'mousedown' seguido por un' mouseup' sería un clic, y tener sólo un clic de trabajo una vez, no es el 'uno () 'método? – adeneo

+0

puede que esto te ayude http://stackoverflow.com/questions/8875070/stopping-propagation-of-mousedown-mouseup-from-a-click-handler –

Respuesta

-4

Sí, debería ser posible si return false; en el manejador de mouseup, porque el onclick se dispara después de un mousedown y se ha producido un mouseup. Esto es posible en JavaScript regular, por lo que debería funcionar también con los manejadores de eventos de jquery.

EDIT:

devolver un valor booleano desde un controlador de eventos en realidad debería ser suficiente para el consumo evento. Sin embargo, como esto es muy escamosa en todos los navegadores se debe utilizar la función para cancelar manualmente burbujeo de eventos:

event.stopPropagation(); 

donde evento es el parámetro de su controlador de eventos recibe.

+1

Lo probé en jsfiddle y no pareció funcionar. .. –

+0

lo he intentado y parece que tampoco funciona – Elliot

+0

Puede haber problemas con este enfoque si ambos eventos se disparan en el mismo elemento. ¿Puede decirme exactamente lo que está tratando de lograr, entonces tal vez pueda proporcionar una solución alternativa? – chucktator

0

En Chrome e Internet Explorer, aunque no Firefox, desconectar y volver a conectar el elemento al mousedown o mouseup evitará que se active el evento click. En Internet Explorer, este truco no atrapa dos clics (en Chrome lo hace).

Pero no confiaría en este extraño comportamiento, quién sabe si no cambiará en algún momento. Además, tenga en cuenta que separar y volver a conectar también puede tener efectos secundarios en los elementos secundarios del elemento separado (recarga de iframes, restauración de campos de archivos, ...).

0

Hay un enfoque incómodo que es deshabilitar el botón cuando mousedown, y lo habilita después de un corto período de tiempo, como 100 ms. Si el mouseup ocurre en este período, no se activará el clic.

$('#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>

Cuestiones relacionadas