К сожалению, ни один из вариантов (автозаполнение, data-lpignore и т. Д.) Не помешал LastPass автоматически заполнять поля моей формы. Я применил к проблеме более упорный подход и name
вместо этого установил входные атрибуты асинхронно через JavaScript. Следующая функция, зависящая от jQuery (вызываемая из обработчика события onsubmit формы), сделала свое дело:
function setInputNames() {
$('#myForm input').each(function(idx, el) {
el = $(el);
if (el.attr('tmp-name')) {
el.attr('name', el.attr('tmp-name'));
}
});
}
$('#myForm').submit(setInputNames);
В форме я просто использовал tmp-name
атрибуты вместо эквивалентных name
атрибутов. Пример:
<form id="myForm" method="post" action="/someUrl">
<input name="username" type="text">
<input tmp-name="password" type="password">
</form>
Обновление 2019-03-20
Я все еще сталкивался с трудностями с вышеизложенным из-за AngularJS в зависимости от полей формы, имеющих name
атрибуты, чтобы ngMessages правильно отображал сообщения об ошибках проверки полей.
В конце концов, единственное решение, которое я смог найти для предотвращения заполнения полей пароля LastPass в моей форме смены пароля, заключалось в следующем:
- Избегайте использования
input[type=password]
полностью, И
- не иметь "пароль" в имени поля
Поскольку в моем случае мне нужно иметь возможность отправлять форму в обычном режиме, я по-прежнему использовал свое оригинальное решение для обновления имен полей «как раз вовремя». Чтобы избежать использования полей ввода пароля, я обнаружил, что это решение работает очень хорошо.
type="hidden"
а не скрывать его с помощью CSS