password - input autocomplete javascript
Detenga el complemento de autocompletar de jQuery para que no olvide el texto cuando el usuario haga clic atrĂ¡s (6)
Estoy usando el complemento de autocompletar jQuery para obtener una lista de ubicaciones, que funciona bien. Pero si el usuario hace clic en el botón Atrás del navegador después de enviar la página con el cuadro de texto de autocompletar, el cuadro de texto está vacío. Si elimino el autocompletado del cuadro de texto y lo envío y hago clic en él, recordará el texto.
¿Hay alguna manera de evitar que la autocompleta borre el cuadro de texto cuando se carga la página?
Aunque el código de heyman & Glenn funciona, la desactivación al enviar puede no ser suficiente cuando el formulario se muestra después del envío, por ejemplo, porque actualiza otra parte de la página con AJAX. Además, al salir de la página usando otro enlace (sin enviar el formulario) deja el atributo de autocompletar en su lugar, y al usar el botón Atrás se eliminará el valor ingresado.
Uso el siguiente código para arreglar eso. Solo agrega el atributo autocompletar cuando el elemento de entrada está activo (tiene foco). He puesto la eliminación y la adición de los atributos en las funciones nombradas porque tengo múltiples campos de autocompletar con diferentes configuraciones. Si solo tiene un campo de autocompletar puede colocar los cuerpos de función en las instrucciones de evento.
var autoCompleteFixSet = function() {
$(this).attr(''autocomplete'', ''off'');
};
var autoCompleteFixUnset = function() {
$(this).removeAttr(''autocomplete'');
};
$(''#elem'').autocomplete({
minLength : 1,
source: ''/values.php''
}).focus(autoCompleteFixSet).blur(autoCompleteFixUnset).removeAttr(''autocomplete'');
Bueno, encontré el problema. Parece estar en Firefox, no en IE, y técnicamente no se debe al complemento de autocompletar. Es porque el complemento agrega el atributo autocomplete="off"
al cuadro de texto.
Esto es para que el historial de autocompletar del navegador no entre en conflicto con el autocompletado de jquery, pero en Firefox, los campos que tienen este atributo no se rellenan previamente cuando el usuario hace clic en el botón Atrás.
Supongo que no hay forma de evitar esto, parece ser el comportamiento predeterminado del navegador. Si alguien conoce diferente, publique un comentario.
De hecho, este es un comportamiento MALO de IE, la función de "recordar" debe hacerse usando un lenguaje del lado del servidor.
Algunos de ellos (ASP.NET) lo hacen automáticamente a menos que se lo indiquen.
Con PHP, necesitas usar GET o POST supervars.
Si no está utilizando ningún lenguaje del lado del servidor, puede usar javascript para acceder a la cadena de consulta GET y pasar algunos parámetros entre las páginas, que los parámetros se pueden utilizar para obtener el valor de la caja de texto y luego rellenarla previamente.
Ninguna de las soluciones publicadas me funcionó, ya que mi aplicación altamente controlada por AJAX simplemente se almacenaba en caché en su último estado conocido antes de salir de la página (con autocompletar = "apagado") y cuando el usuario usaba el botón Atrás, el navegador no funcionaba correctamente. No inserte el valor anterior en el campo de búsqueda (ya que el atributo autocompletar se configuró en desactivado). Así que la única solución fue en este caso para ejecutar mi JS, y para hacerlo tuve que evitar el almacenamiento en caché. Encontré este fragmento simple para que funcione bien. Simplemente inserte en su página principal (que el usuario se irá cuando haga clic en cualquiera de los enlaces), y debe evitar el almacenamiento en caché bastante bien. Luego use JS para completar todos los valores que desee, incluido el valor del campo de autocompletar.
window.onbeforeunload = function () {
// Empty function, but it prevents the browser caching this anyway!
}
Tuve el mismo problema hoy, y encontré una forma de evitar esto.
$("#search_form").submit(function() {
$("#location")[0].removeAttribute("autocomplete");
});
Este código eliminará el atributo de autocompletar justo antes de enviar el formulario. Deberá cambiar los selectores para que coincidan con su forma y entrada (s).
en la función $.autocompleter
en el complemento hay una variable llamada previousValue
en la línea 72 de la versión no jquery.autocomplete.js
de jquery.autocomplete.js
. Esta variable se establece en una cadena vacía en la inicialización.
Si te sientes ambicioso, podrías intentar editar este script y tener si comprueba si el cuadro de texto ya tiene un valor, y establecer previousValue si lo hace.