2012-09-13 16 views
6

Recientemente publiqué esta pregunta: jqgrid edit form autocomplete="off" by default, how to change to autocomplete="on" porque noté que, de forma predeterminada, el formulario de edición jqGrid daba a todos los elementos de entrada el atributo autocomplete="off". Pensé que esta era la razón por la cual el navegador web no implementaría la funcionalidad habitual de autocompletar para los formularios de edición jqGrid. Después de solucionar este problema y hacer que todos los elementos de entrada tengan el atributo autocomplete="on", todavía no hay autocompletar para los formularios de edición jqGrid.formularios de edición jqgrid pierden la funcionalidad de autocompletar del navegador

¿Alguien sabe por qué el autocompletar no funcionará para estos formularios? Los formularios se envían a través de ajax, por lo que no estoy seguro de si esto lo está afectando o no.

Para que quede claro, soy no hablando de jQuery's autocomplete(). Estoy hablando de un navegador web moderno (Chrome, FF) incorporado en la funcionalidad de autocompletar formularios.

Por ejemplo, vaya a mi formulario de ejemplo jsfiddle here. Puede completar el formulario con lo que desee y luego hacer clic en submit. Actualice la página y vuelva a llenarla. Su navegador debe tener recordado y sugiere los valores que acaba de completar la primera vez. Esto es lo que sucede para mí.

Por otro lado, si va a un ejemplo de edición jqGrid here. Seleccione una fila y haga clic en el botón de edición pequeña (se ve como un lápiz). No puede cambiar el primer campo, pero puede cambiar los otros campos. Pon lo que quieras en los otros campos y haz clic en submit. Actualice la página intente de nuevo. Lo que estoy experimentando desde muchas computadoras y tanto FF como Chrome es que este formulario hace NO recuerda ninguna de las entradas anteriores.

Este es el problema, ¿estás experimentando lo mismo? Si es así, ¿sabe si es posible hacer que estos formularios jqGrid sean compatibles con la funcionalidad de autocompletar del navegador?

Gracias!

Respuesta

4

Mientras que todos los navegadores manejan el almacenamiento y autocompletado de campos de formulario en ligeramente diferentes maneras, todas ellas se basan en la formulario que se envía para almacenar los valores de los campos del formulario. Como jqGrid maneja los formularios a través de AJAX (el botón de actualización es un enlace y no un botón de envío), los formularios en sí mismos nunca se envían, lo que a su vez nunca permite que el navegador almacene los valores de campo para su posterior uso mediante autocompletar.

Un método de forzar el navegador para almacenar los valores de los campos, es crear un <iframe />, clonar el <form />, añadir el <form /> clonado en el <iframe /> y presentarlo como parte del proceso de formulario de presentación de AJAX.

Tome por ejemplo esta versión modificada de su JSFiddle.

En el ejemplo anterior, complete el 'Formulario estándar' y envíe, vuelva a cargar la página y los campos se completen automáticamente como se esperaba. Complete el 'Formulario AJAX' y envíe, vuelva a cargar la página y los campos NO están autocompletados. Finalmente, complete el 'Formulario iFrame de AJAX +' y envíe, vuelva a cargar la página y los campos ahora deben completarse automáticamente.

* Nota: El ejemplo anterior se probó en Chrome, Safari y Firefox. Tu Milage puede variar.

Para completar, aquí está el código relavent:

$('#iframe_submit').bind('submit', function(e){ 
    e.preventDefault(); // Prevents Standard Submit 

    // Do AJAX Stuff Here... 

    // Create Clone of Form, Append to iFrame and Trigger Submit 
    // This Forces Autocomplete to Register 

    var $clone = $('#iframe_submit').clone(); 
     $clone.attr('id', 'iframe_clone'); // Only One ID Allowed 

     $('<iframe />').appendTo('body').contents().find('body').append($clone); 
     $('iframe').contents().find('#iframe_clone').submit(); 
    }); 

espero que esto ayude!

+0

¡Gracias por la aclaración! Sería genial si jqGrid agregaría esta funcionalidad en el paquete predeterminado, o tiene una opción para habilitar esto. –

0

Aunque tiene un código para ver exactamente su problema. Voy a saltar a la suposición de que es completamente posible debido a una limitación del navegador, dependiendo del navegador. Pero también. Podría ser una de algunas cosas. O bien los elementos de tu formulario no están incluidos en una etiqueta <form></form> y, por lo tanto, los buscadores habilitados para autocompletar no pueden retomar los elementos en los que deseas que se complete automáticamente.

2 el uso de nombres desconocidos para sus elementos. Por lo general, los navegadores habilitados para autocompletar buscan ejemplos de nombres de elementos de formulario comúnmente utilizados: primer nombre, primer nombre, nombre, correo electrónico, nombre de usuario, calle 1, calle_una .. y así sucesivamente.

3 es completamente posible si carga la cuadrícula dinámicamente a través de javascript en un documento listo como función. Que el autocompletar ya hizo su verificación para ver si había algún formulario en la página para completar automáticamente. En lo que si ese es el caso, la funcionalidad de autocompletar de los navegadores podría estar ejecutándose antes de que tu documento esté listo. ¿Qué si esto resulta ser el caso .. Esta publicación puede ayudarle en el camino correcto

jQuery AutoComplete Trigger Change Event

+0

Por favor, echa un vistazo a la pregunta actualizada. Hay ejemplos que puedes probar. En los ejemplos elijo nombres extraños, así que ese no es el problema. Además, no estoy hablando de 'autocompletar' de jQuery con el que se vinculó. ¡Gracias por la ayuda! –

Cuestiones relacionadas