#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"
в форме ввода.