Формы редактирования jqgrid теряют функцию автозаполнения браузера

Недавно я опубликовал этот вопрос: Автозаполнение формы редактирования jqgrid = выключено по умолчанию, как изменить на автозаполнение = включено, потому что я заметил, что по умолчанию форма редактирования jqGrid присваивала всем элементам ввода атрибут autocomplete="off". Я думал, что это было причиной того, что веб-браузер не реализовывал обычную функцию автозаполнения для форм редактирования jqGrid. После устранения этой проблемы и придания всем элементам ввода атрибута autocomplete="on" автозаполнение для форм редактирования jqGrid по-прежнему отсутствует.

Кто-нибудь знает, почему автозаполнение не работает для этих форм? Формы отправляются через ajax, поэтому я не уверен, влияет ли это на это или нет.

Просто чтобы внести ясность, я не говорю о jQuery autocomplete(). Я говорю о современных веб-браузерах (Chrome, FF), встроенных в функции автозаполнения форм.

Например, перейдите к моей форме примера jsfiddle здесь. Вы можете заполнить форму чем угодно, затем нажмите submit. Обновите страницу и заполните ее снова. Ваш браузер должен был запомнить и предложить значения, введенные в первый раз. Это то, что происходит для меня.

С другой стороны, если вы перейдете к примеру редактирования jqGrid здесь . Выберите строку и нажмите маленькую кнопку редактирования (выглядит как карандаш). Вы не можете изменить первое поле, но вы можете изменить другие поля. Введите все, что хотите, в другие поля и нажмите submit. Обновите страницу попробуйте еще раз. То, что я испытываю на многих компьютерах, а также на FF и Chrome, заключается в том, что эта форма НЕ запоминает ни одну из прошлых записей.

Это проблема, вы испытываете то же самое? Если да, то знаете ли вы, можно ли сделать эти формы jqGrid совместимыми с функцией автозаполнения браузера?

Спасибо!


person jeffery_the_wind    schedule 13.09.2012    source источник


Ответы (2)


Хотя все браузеры обрабатывают хранение и автозаполнение полей формы немного по-разному, все они полагаются на отправляемую форму для сохранения значений самих полей формы. Поскольку jqGrid обрабатывает формы через AJAX (кнопка обновления — это ссылка, а не кнопка отправки), сами формы фактически никогда не отправляются, что, в свою очередь, не позволяет браузеру сохранять значения полей для последующего использования с помощью автозаполнения.

Один из способов заставить браузер сохранять значения полей — создать <iframe />, клонировать <form />, добавить клонированный <form /> в <iframe /> и отправить его как часть процесса отправки формы AJAX.

Возьмем, к примеру, эту модифицированную версию вашего JSFiddle.

В приведенном выше примере заполните «Стандартную форму» и отправьте ее, перезагрузите страницу, и поля будут автоматически заполнены, как и ожидалось. Заполните «Форму AJAX» и отправьте, перезагрузите страницу, и поля НЕ заполнятся автоматически. Наконец, заполните «Форму AJAX + iFrame» и отправьте ее, перезагрузите страницу, и теперь поля должны заполняться автоматически.

*Примечание. Приведенный выше пример был протестирован в Chrome, Safari и Firefox. Ваш пробег может отличаться.

Для полноты, вот соответствующий код:

$('#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();
    });

Надеюсь, это поможет!

person dSquared    schedule 21.09.2012
comment
Спасибо за разъяснения! Было бы здорово, если бы jqGrid добавил эту функциональность в пакет по умолчанию или имел возможность включить это. - person jeffery_the_wind; 25.09.2012

Хотя у вас есть некоторый код для просмотра вашей проблемы. Я собираюсь перейти к предположению, что это вполне возможно из-за ограничений браузера, в зависимости от браузера. Но также. Это может быть одна из нескольких вещей. Либо ваши элементы формы не заключены в тег <form></form>, и поэтому браузеры с поддержкой автозаполнения не могут подобрать элементы, для которых вы хотите использовать автозаполнение.

2 вы используете неясные имена для своих элементов. Обычно браузеры с поддержкой автозаполнения ищут часто используемые имена элементов формы, например: first_name, firstname, name, email, username, street1, street_one... и так далее.

3 это вполне возможно, если вы загружаете свою сетку динамически через javascript в документ, готовый как функция. Что автозаполнение уже проверило, есть ли на странице какие-либо формы для автозаполнения. В этом случае функция автоматического завершения браузера может быть запущена до того, как ваш документ будет готов. Что, если это окажется так. Эта публикация может помочь вам на правильном пути

Событие изменения триггера автозаполнения jQuery

person chris    schedule 21.09.2012
comment
Пожалуйста, ознакомьтесь с обновленным вопросом. Есть примеры, которые вы можете попробовать. В примерах я выбираю странные имена, так что проблема не в этом. Также я не говорю о autocomplete jQuery, на который вы ссылались. Спасибо за помощь! - person jeffery_the_wind; 21.09.2012