2008-12-05 30 views

Respuesta

17

La última vez que tuve ese problema, terminé usando el evento onpropertychange para Internet Explorer. Leí acerca de eso here on MSDN: es la forma recomendada de evitarlo.

+0

pero parece que se dispara cada vez que el usuario presiona una tecla. ¿Estoy haciendo algo mal aquí? – Preets

+1

No, lamentablemente, cómo funciona. Pero acabo de encontrar este recurso, que parece abordar el problema de una manera agradable: http://jehiah.cz/archive/onchange-and-autocomplete –

+2

Nota: onpropertychange ya no parece funcionar de manera confiable en IE9, al menos en mi prueba –

12

He encontrado esta característica molesta antes y mi solución en ese momento era usar el evento onfocus para registrar el valor actual del cuadro de texto, y luego usar el evento onblur para verificar si el valor actual ahora coincide con el valor guardado durante onfocus. Por ejemplo

<input type="text" name="txtTest" value="" onfocus="this.originalvalue=this.value" onblur="if (this.value != this.originalvalue) alert('Test has changed')"/> 
+2

Esto me estaba sucediendo en la versión más reciente de Chrome, por lo que claramente no es algo específico de IE. El 'onblur' solucionó mi problema. – DanO

+0

onblur también solucionó mi problema, y ​​trabajó en IE 7,8,9 y 9 comp. Gracias –

+2

Esto funcionó muy bien para mí - aquí está mi traducción jquerified: '$ (" # my-field "). Focus (función() {this.originalvalue = this.value}). Blur (función() {if (this. value! = this.originalvalue) alert ('changed')}); ' –

1

que a su vez sólo fuera de autocompletar para los cuadros de texto que necesito para disparar un evento de cambio de texto

'Turn off Auto complete 
'(it needs to fire the text change event) 
txtYourTextBox.Attributes.Add("AutoComplete", "off") 

sólo hay que poner en que la carga de la página.

Alternativamente, se puede añadir el atributo de su margen de beneficio en el elemento input o todo el form:

<input type=text autocomplete=off> 

o

<form autocomplete=off> 
+1

Eso no es realmente una solución. Autocompletar es útil para los usuarios. La pregunta es sobre cómo trabajar con ella, no para desactivarla. –

+1

¡Lo amo! Fuerce a los fabricantes de navegadores para que nos proporcionen un mejor soporte para estas características de pelusa que desean agregar, para que podamos trabajar con ellas ... de lo contrario, simplemente las desactivamos. – eselk

+1

Esta es una solución porque desactiva una característica que no funciona. Tengo un formulario que en vivo valida cada campo, y cuando se autocompletan, aún se muestran por error. Prefiero no usar la función Autocompletar, luego tener una forma rota. Sería bueno si los proveedores de navegadores generaran un evento cuando se produzca el autocompletado. –

4

me acaba de encontrar que using jQuery 1.4 to set change event puede resolver este problema. Parece que es la solución más fácil a este problema si ya está familiarizado con jQuery.

+1

Estoy usando jquery 1.7.1 y la elección de la entrada de autocompletar con la tecla de tabulación no activaba el evento de cambio. Usé la solución de Tim C. –

6

Sobre la base de la respuesta de Tim C, aquí es el simple jQuery que se me ocurrió para manejar esto para todos los cuadros de texto en una página:

$("input[type=text]").bind("focus change",function(){ 
    this.previousvalue = this.value; 
}).blur(function(){ 
    if (this.previousvalue != this.value){ 
     $(this).change(); 
    } 
}) 

Si no se preocupan por onchange disparar varias veces, puede hacer que sea más simple:

$("input[type=text]").blur(function(){ 
    $(this).change(); 
}) 
1

he encontrado que la siguiente jQuery (v1.10 +) JavaScript funciona en el caso de los textos igualmente auto-completado de campos de entrada de texto HTML. Esto fue probado para funcionar de forma fiable al menos en Safari 6.1.1 en Mac OS X 10.8.5, pero debería funcionar en otros navegadores compatibles también:

$("input:text[id=text_field_id]").bind("focus change keyup blur", function(event) { 
// handle text change here... 
}); 

parecía que la adición del manejador blur evento fue la clave para haciendo que esto funcione, aunque los otros manejadores de eventos ayudan a asegurar que se llame al manejador de eventos cada vez que el texto cambie, ya sea debido a una edición o nueva entrada mediante la característica de autocompletar del navegador.

Simplemente reemplace el código "input:text[id=text_field_id]" anterior con el selector correspondiente a su campo de introducción de texto deseado, o si se utiliza el atributo id para referirse a su campo, reemplazar text_field_id con valor id atributo de su campo de texto.

Cuestiones relacionadas