Ответ 1
Просто добавьте:
autocomplete="off"
в качестве атрибутов элементов INPUT
, f.ex:
<input autocomplete="off" id="register_username" type="text" name="username">
У меня есть этот код:
html:
<input id="register_username" type="text">
<input id="register_password" type="text">
<input id="register_repeatpassword" type="text">
<input id="register_email" type="text">
JQuery:
$(document).ready(function(){
$('#register_username').attr('autocomplete','off');
$('#register_password').attr('autocomplete','off');
$('#register_repeatpassword').attr('autocomplete','off');
$('#register_email').attr('autocomplete','off');
});
Я хочу отключить функцию автозаполнения, выделенную некоторыми браузерами, и фактически заставить пользователя вводить все поле, но код не работает, выпадающее меню все еще появляется, и пользователь все еще может выбрать материал, который был напечатан раньше. Я также пытался использовать пользователь autocomplete="off"
, но ничего не произошло. Что я здесь делаю неправильно?
Просто добавьте:
autocomplete="off"
в качестве атрибутов элементов INPUT
, f.ex:
<input autocomplete="off" id="register_username" type="text" name="username">
Версия jQuery:
$("#register_username").attr("autocomplete", "off");
проверьте этот fiddle вне
document.getElementById("register_username").autocomplete="off"
Хотя я согласен, autocomplete="off"
должен быть широко поддержан и является конечным решением, он не работает, может быть результатом спецификации HTML5 в атрибуте автозаполнения:
Механизм автозаполнения должен быть реализован пользовательским агентом, действующим так, как будто пользователь изменил значение элемента, а должен выполняться в то время, когда элемент изменен (например, сразу после того, как элемент были вставлены в документ или когда пользовательский агент прекратил разбор).
Это, для меня, подразумевает, что он должен быть "оригинальным" атрибутом элемента и не может быть добавлен post-render. И так как большинство браузеров реализуют новую спецификацию 1 скорее всего, если они разрешили ее с помощью javascript, прежде чем они, вероятно, исправили реализацию на основе вышеупомянутой спецификации.
Если вы еще этого не сделали, попробуйте добавить атрибут непосредственно к элементам управления вместо того, чтобы полагаться на jQuery, делая это на [предположительно] готовом документе.
1 Я использую здесь спецификацию, поскольку HTML5 не является стандартом, но многие браузеры реализуют некоторые из более конкретных функций. Поскольку autocomplete
существует с тех пор, как IE5, вероятно, это один из тех, которые вы можете рассмотреть как безопасную реализацию.
<form id='myForm'>
<input id="register_username" type="text">
<input id="register_password" type="text">
<input id="register_repeatpassword" type="text">
<input id="register_email" type="text">
</form>
$(document).ready(function(){
$('#myForm').on( 'focus', ':input', function(){
$(this).attr( 'autocomplete', 'off' );
});
});
Теперь вам нужно заменить "off" на другую случайную строку, например "nope":
Jquery:
$("#register_username").attr("autocomplete", "nope");
HTML:
<input id="register_username" type="text" autocomplete="nope">
Работает по состоянию на 23 апреля 2019 года.
Если вы хотите отключить автозаполнение Chrome на всех страницах, особенно если вы не используете формы, а используете сериализованные селекторы jquery для отправки ваших данных.
Выполнение этого во время выполнения дало наилучшие результаты для меня, и Chrome все равно будет автоматически заполняться во время выполнения, так что это оправданное решение для противодействия поведению Chrome.
Просто добавьте это внизу вашего кода, и Chrome не будет пытаться принудительно заполнить вещи:
<script>
$(document).ready(function () {
$("input").attr("autocomplete", "new-password");
});
</script>
в случае, если кто-то приходит сюда в поисках, как отключить автозаполнение jquery:
$("#elementId").autocomplete({
disabled: true
});
Используя jQuery, я делаю это на странице макета, или немного HTML, который будет присутствовать на каждой странице сайта.
$(document).ready(function () {
//when the page is done loading, disable autocomplete on all inputs[text]
$('input[type="text"]').attr('autocomplete', 'off');
//do the same when a bootstrap modal dialog is opened
$(window).on('shown.bs.modal', function () {
$('input[type="text"]').attr('autocomplete', 'off');
});
});