Обнаружение сохраненной входной информации Chrome с помощью Jquery?

#jquery #google-chrome #html-input

#jquery #google-chrome #html-ввод

Вопрос:

Я использую jquery для создания текста-заполнителя над вводом, который слегка исчезает, когда ввод получает фокус, и полностью исчезает, когда пользователи вводят. Эта часть работает нормально. Итак, чтобы избежать конфликта с сохраненным текстом, я завернул код в:

if(! $($input).val()) {

... создайте заполнитель, настройте правила для его исчезновения и т. Д...

}

Если у пользователя есть сохраненный пароль, например, в Firefox, браузер обнаружит, что ввод имеет значение, а затем не создаст текст-заполнитель.

Однако в Chrome Chrome не загружает сохраненное значение до тех пор, пока загрузка страницы не будет завершена… это означает, что он обнаруживает, что входные данные пусты, создает текст-заполнитель, а затем, после загрузки страницы, помещает сохраненное значение во входные данные, что приводит к тому, что заполнитель и пароль накладываются друг на друга.

Как я могу обнаружить, что Chrome заполняет форму, чтобы избежать этого неудачного перекрытия?

Комментарии:

1. просто как примечание… Я тоже это делаю и ищу ответ. если я обновлю страницу, она определит значение. Если я перейду в адресную строку и отправлю ее снова, то он выполнит вышеуказанное. Попытаюсь исправить это и вернусь, если найду ответ 🙂

Ответ №1:

В конце концов, я заметил, что Chrome не запускает какие-либо события при автозаполнении, но если вы подождете до window.загрузите, а затем проверьте, есть ли у какого-либо ввода -webkit-автозаполнение, после чего вы можете их проверить. Как вы можете видеть, я также использую средство удаления (Бен Алман — http://benalman.com/projects/jquery-throttle-debounce-plugin /) подождать еще 200 миллисекунд, как даже после window.загрузка иногда еще не вводит текст автозаполнения…

 $(window).load($.debounce(200, function () {

       if ($('input:-webkit-autofill')) {

           // We know that this form has autofill on its way. Let's check this again after a delay as its not always done on window.load

           $('input:-webkit-autofill').each(function () {

               if ($(this).val() !== "") {
                   $(this).parent().find('label').hide();
               }

           });

       }

    }));
  

Ответ №2:

Я не знаю, когда именно запускается автозаполнение Chrome, но внутри

 $('input, select').on('focusin', function(evt) {...});
  

Я уже получаю автоматически заполненные значения для всех полей.

(Для меня этого достаточно, чтобы проверить наличие «грязных» форм, т.Е.. формы с измененными значениями по сравнению с исходными значениями.)

Ответ №3:

Чтобы удалить сохраненную в браузере информацию, вы можете использовать атрибут autocomplete="off" в форме ввода.