2011-06-23 15 views
7

¿Cómo puedo activar el evento onclick antes del evento onblur si estoy enfocado actualmente en el cuadro de texto en jQuery?jQuery: ¿Cómo disparar onclick primero antes de onblur?

Salida prevista: Dispare el evento de clic del botón antes del evento de desenfoque en el texbox. Alertas "mybtn onclick alerta"

Demostración:http://jsfiddle.net/Zk8Fg/

Código:

<input type="text" name="fname" id="fname" value="" /><br /> 
<input type="button" name="mybtn" id="mybtn" value="Click Me" /> 

<script language="javascript"> 
$(document).ready(function() { 
    myFunc(); 
}); 

function myFunc() { 
    $('#fname').focus().blur(function() { 
     alert('fname onblur alert'); 
    }); 

    $('#mybtn').click(function() { 
     alert('mybtn onclick alert'); 
    }); 
} 
</script> 

Gracias :)

+0

¿Qué estás tratando de hacer con '$ .focus(). Blur()'? – Sampson

+1

¿Puedo preguntar por qué y/o qué está tratando de hacer? tal vez alguien podrá sugerir algunas alternativas? Los eventos de UI suceden es cierto y no creo que pueda cambiarse. –

+0

@Jonathan: Tengo una validación sobre el evento de desenfoque actualmente enfocado en el cuadro de texto, pero el escenario de desenfoque es una vez que hago clic en el botón y luego el evento de desenfoque se dispara primero que el evento de clic. – marknt15

Respuesta

3

Si el campo de entrada se centra en la actualidad, no se puede enfocar otro elemento sin primero difuminar su enfoque actual. Lo que sea que estés tratando de hacer, probablemente haya una mejor manera.

registro visible de Eventos: http://jsfiddle.net/Zk8Fg/3/

+0

Entonces, ¿no es posible? Tal vez hay una solución a esto? Gracias – marknt15

+3

@ marknt15 No es posible desviar la secuencia de eventos estándar, pero eso no significa que sea imposible lograr lo que estás tratando de hacer. Háganos saber lo que quiere lograr, haremos nuestro mejor esfuerzo para ayudar. – Sampson

6

Bueno, es probable que parte de la norma, que activa el evento de primera por lo que probablemente no debería estar cambiando el orden. Sin embargo, lo que podría hacer es posponer la acción resultante usando window.setTimeout con un breve retraso.

$('#fname').focus().blur(function() { 
    window.setTimeout(function(){alert('fname onblur alert')},0.1); 
}); 

Estoy de acuerdo con los otros comentarios, sin embargo, que realmente parece que debe replantearse cómo vas acerca de esto porque la reordenación de los eventos predeterminados me parece un truco cojos que probablemente tiene soluciones más elegantes.

+0

Gracias @SpliFF. Esta es la mejor respuesta. :) –