2012-09-10 11 views
6

ver este jsFiddle:jQuery mouseUp no disparar después de calada enlace

http://jsfiddle.net/CB87X/6/

clic y mantener pulsado el botón, arrastre fuera del botón y la liberación. Como puede ver, el evento mouseup nunca se activa si el mouse no está sobre el elemento cuando se suelta el botón del mouse. Por lo tanto, el estilo en mi ejemplo nunca cambia de nuevo a su original. ¿Cómo se activa el evento mouseup si se suelta el botón del mouse cuando no está sobre el elemento cliqueado?

Edit1: BTW He visto varias soluciones en este sitio, las implementé y el evento mouseup aún no se activó.

+2

Tenga en cuenta que este es el comportamiento predeterminado de los botones regulares, así, al menos en cromo. [Demostración] (http://jsfiddle.net/QxZCB/) –

+1

como [de esta manera] (http://jsfiddle.net/CB87X/7/) – Sender

Respuesta

9

El evento mouseup es relativo a dónde está el puntero y es el comportamiento esperado. Si desea que su botón tenga el estilo adecuado, vincule también el evento mouseleave.

+0

Por "también" supongo que puede vincular dos eventos a un selector? Si es así, ¿puedes mostrarme cómo? ¿Acabo de agregar una función separada? – preahkumpii

+5

Agregar eventos separados por 'espacio'. '$ (". pero "). bind (" mouseup mouseleave ", function() {...}' – alexbusu

+0

+1 para proporcionar el abrelatas a esta lata de gusanos * (de tener que administrar las hojas de mouse y el mouse re -entrada si simplemente se cae el efecto mientras se mantiene el botón no es suficiente) * Gracias, sin embargo :-) – HostileFork

2

bifurcada su exemple para proporcionar un ejemplo de trabajo:

http://jsfiddle.net/67Rrs/2/

Una vez que el botón es mousedown ed, un evento está ligada a la siguiente mouseup, donde quiera que suceda, que restablece el estilo.

2

Esto debería hacer el truco. Si dejó clic en el botón (.but) y arrastra, puede mouseup en cualquier lugar de la página y aún disparar el evento click. Si mouseleave la página 'cuerpo' y mouseup, el evento bind ed mouseleave es unbind ed.

$('.but').mousedown(function(e) { 
    if (e.which == 1) { 
     var $this = $(this); 
     $this.bind('mouseleave', function(){ 
      $('body').one('mouseup', function() { 
       $this.click(); 
      }); 
     }); 
     $this.mouseup(function() { 
      $(this).unbind('mouseleave'); 
     }); 
    } 
}); 
Cuestiones relacionadas