2011-05-18 17 views
7

por razones arcanas Necesito poder cancelar el evento click mediante el evento mousedown.En el evento mousedown, ¿es posible cancelar el evento Click resultante? o pasarle información?

En pocas palabras; Estoy creando un menú contextual en el evento mousedown, sin embargo, cuando el usuario hace clic en la página, el menú contextual debería desaparecer.

No puedo usar el evento mousedown sobre el clic en ese escenario porque quiero que el usuario pueda hacer clic en los enlaces dentro del menú (un clic completo nunca viajaría a los elementos de menú basados ​​en <a>).

Si es de alguna ayuda, se puede aplicar jQuery.

Me gustaría evitar que el evento click ocurra desde el mousedown inicial, o ser capaz de pasar información al evento click (a través de originalEvent o de otro modo).

TIA

+0

¿Tal vez podría proporcionar algún 'código de ejemplo' para alentar la retroalimentación precisa? Gracias. – pixelbobby

+0

la base jsfiddle proporcionada por user759588 parece bastante representativa. – unomi

Respuesta

1

acabo de tener el mismo problema. Fijé mi menú contextual cerrándolo en mousedown y comer el evento mousedown en el menú así que todavía puedo recibir clics en el menú, así:

$(document).one('mousedown.ct', null, function() { cmenu.hide(); return false; }); 
cmenu.bind('mousedown', function(e) { e.stopImmediatePropagation(); }); 

Y en la función hide() que desenlazar el mousedown.ct de nuevo, en caso de que estuviera cerrado debido a un clic en un elemento.

3

parece ser imposible, ni FF ni Opera didnt cancelar próxima click ser que lo impida en mousedown y/o mouseup (como nota al margen: click se distribuye después mouseup si cumplen ciertas condiciones). testcase: http://jsfiddle.net/ksaeU/

+0

+1 por intentar :) – unomi

+0

No me importa quién haya hecho qué a quién, pero amigos tientan por los comentarios y la venganza no se está convirtiendo en vicio. Por favor, ser amable. :) – Kev

+0

Se eliminó el voto a favor. Lamento haber estado tan enojado. –

0

Oye, creo que esto es lo que intentas hacer con tu código. Si no, me disculpo, es posible que haya malentendido la pregunta. Me utilizado jQuery para lograr que se haga: http://jsfiddle.net/jackrugile/KArRD/

$('a').bind({ 
    mousedown: function(){ 
     // Do stuff 
    }, 
    click: function(e){ 
     e.preventDefault(); 
    } 
}); 
Cuestiones relacionadas