2011-07-29 13 views

Respuesta

9

Creo que es porque después de cerrar el diálogo (cuadro de alerta), el foco vuelve al cuadro de texto, por lo tanto, la función volverá a activarse.

+0

Hmm gracias por su respuesta. Vea aquí mi problema real http://stackoverflow.com/questions/6869717/google-chrome-infinite-loops-and-selecting-text – ajbeaven

+0

Para que otros lo vean, si está depurando, use 'console.log' en lugar de mostrar un modal de alerta ya que esto solucionará los problemas que estaba teniendo arriba. – ajbeaven

5

Creo que es porque el navegador envía el foco de la alerta a su campo de texto cada vez que hace clic en el botón "Aceptar" de la alerta. Probablemente no va a aparecer una alerta (creo) en la versión final de su código, por lo que esto podría no ser un problema a largo plazo.

+2

+1 también en lugar de una alerta i suelen añadir un div extra en la página (a veces posicionado absoluto) y acaba de añadir a los mensajes en ese div. ej. '$ (" # myMessageDiv "). append (messageString +"
");' –

+1

Hago exactamente lo mismo - menos invasivo que las alertas mientras desarrollo :) – Pwninstein

+2

Prefiero console.log, puede manejar cualquier tipo. – Wylie

2

El problema es que alert() roba el foco del cuadro de entrada y luego lo restaura cuando se cierra el cuadro de diálogo. Puede solucionar esto borrando el foco del cuadro de entrada antes de mostrar la alerta.

Ejemplo: http://jsfiddle.net/XppG9/6/

+0

Creo que esto no resuelve su problema, el usuario recibirá un aviso cada vez que se concentre en el cuadro de texto, y luego responderá. El usuario probablemente volverá a ingresar al cuadro de texto para escribir, aparecerá un mensaje nuevamente. – dpp

+0

@domanokz - Correcto, esto simplemente elimina el bucle infinito. No hace nada para eliminar los problemas de usabilidad causados ​​al mostrar una alerta cada vez que un campo gana enfoque. – aroth

1

Esto está ocurriendo porque se está poniendo el foco de nuevo a la caja de texto. Prueba esto debería funcionar bien en Chrome

$('input[type="text"]').live('focus', function(event) { 
    alert('in'); 
    $(this).blur(); 
}); 
0

Debido alerta está recibiendo el foco de su cuadro de texto, y al cerrar el diálogo de alerta, el enfoque vuelva. Si lo hace cualquier mecanismo no se centra dentro de su función, se disparará una sola vez: http://jsfiddle.net/G8CmV/

<input type="text" /> 
<div id='tester'>Test:</div> 



$('input[type="text"]').live('focus', function(event) { 
    $('#tester').html($('#tester').html() + "_*"); 
    }); 
Cuestiones relacionadas