2011-08-01 21 views
6

Tengo un cuadro de texto que tiene un evento de foco en él. cada vez que el cuadro de texto pierde el foco (pestaña, clic del mouse en cualquier otra parte del formulario), según ciertas condiciones se llama a una función escrita por el usuario que desactive una alerta.Jquery focus out evento

Ahora, mi formulario también tiene un botón, después de llenar el cuadro de texto cuando hago clic en el botón se llama al evento focusOut del cuadro de texto en lugar del botón clic.

¿cómo puedo detener el evento foucusout del cuadro de texto al que se llama al hacer clic en el botón?

("$textbox").focusout(function(){ 
validation; 
alert("message"); 
}); 

("$btn").click(function(){ 
---- 
}); 

¿alguien me puede ayudar?

+0

Se puede proporcionar un poco más de contexto? Si esto es para la validación de formularios, parece innecesario alertar sobre el enfoque de cada cuadro de texto. Si se trata de un resumen que desea mostrar antes de enviar el formulario, hay otras formas (mejores) de lograrlo. – Town

+0

esto es algún tipo de validación adicional, aparte de la validación normal de un cuadro de texto antes de enviar el formulario. Necesito mostrar un cuadro de confirmación al usuario mientras él hace clic o se mueve al siguiente cuadro de texto o hace clic en cualquier otro archivo. –

Respuesta

0

¿No obtiene el evento focusout activando seguido del botón click evento?

Quizás el alert impida que se complete el botón click.

Intente eliminar el alert para probar si se activan ambos eventos.

Actualización:

Tal vez un evento mousedown funcionará en lugar de click, ya que esto inscribirse en la mousedown más que en el caso de que mouseupclick activará sucesivamente.

+0

Hola, la alerta dentro del focusout es obligatoria. Solo se llama al evento de enfoque del cuadro de texto, pero no al evento de clic del botón.¿hay alguna posibilidad de detener el evento de enfoque del cuadro de texto para que deje de ser invocado al hacer clic en el botón? –

+0

El problema es que el 'focusout' ocurrirá en el' mousedown' del botón 'click' pero el clic del botón puede no suceder hasta que ocurra un evento' mouseup' que la alerta podría detener. Solo sugiero que se elimine temporalmente esto para confirmar si esa es la causa del problema. –

+0

intenté con el evento de mouse down, no ayudó aún puedo recibir la alerta de foco ... no quiero que se muestre esta alerta. –

8

he cambiado el evento de clic a un mousedown (por lo que dispara primero) y se utiliza una variable para el seguimiento de su clic:

var buttonClicked = false; 

$('#txt1').focusout(function(){ 
    if(!(buttonClicked)){ 
     alert('BlurEvent'); 
    }else{ 
     buttonClicked = false; 
    } 
}); 

$('#btn').mousedown(function(event){ 
    alert('ClickEvent'); 
    buttonClicked = true; 
}); 

http://jsfiddle.net/924SZ/

EDITAR

var buttonClicked = false; 

$('#txt1').focusout(function(){ 
    if(!(buttonClicked)){ 
     // do normal focusout code. 
    }else{ 
     // button was clicked - dont execute some code. 
     buttonClicked = false; 
    } 
    //this always executes regardless of focusout or button click 
    var reply =confirm("Are you happy with the input?"); 
}); 

$('#btn').mousedown(function(event){ 

    buttonClicked = true; 
}); 
+0

Hola, si ve en su código, si escribo algo en el txtbox y hago clic en el botón, se llama a la primera alerta de enfoque y luego, hago clic en evento. lo que necesito es que el evento de enfoque no se llame en absoluto ... solo se llamará al evento de botón. –

+0

ya que estamos usando el evento 'mousedown', se llama primero antes del' focusout' que sucederá después del 'mouseup'. usando una variable eliminamos la función 'focusout' de la ejecución. es decir. Si hacemos clic en el botón cuando el cuadro de texto tiene foco, 'alert ('BlurEvent')' no se dispara. – f0x

+0

También eliminamos la capacidad de hacer otra cosa que no sea hacer clic en el botón con el mouse ... – Town

0

Creo que el selector JQuery funciona con $. Entonces, OMI, este es el único error que está cometiendo aquí al colocar incorrectamente el signo de dólar '$'.

Qué tal esto. (Suponiendo que el TextBox tiene class="textbox" y Button tiene la class='btn') Cambio

$(".textbox").focusout(function(){ 
    alert('MsgBox'); 
}); 

$(".btn").click(function(){ 
    alert('Button');  
}); 

el selector como seguir si tiene ID s en lugar de class

$("#textbox") AND $("#btn") 

http://jsfiddle.net/dAa2R/6/

+0

el problema es que el foco sigue disparando y está causando una ventana emergente en la aplicación OPs. – f0x