Браузерное автозаполнение и события, запускаемые Javascript

Один из наших пользователей только что поднял вопрос о том, что автозаполнение в их браузерах не вызывает срабатывания событий JS onChange; это вызывает у нас проблемы с регистрацией пользователей.

Это задумано? Есть ли способ обойти это?


person Glen Solsberry    schedule 08.02.2011    source источник


Ответы (5)


Одно из решений, которое я иногда использую, - это проверить, отличается ли значение поля / ввода / выбора от значения defaultValue. defaultValue будет значением, которое изначально было в разметке, а value - текущим значением, также известным как выбранное или введенное значение. Это, вероятно, будет отличаться, даже если форма была заполнена автоматически.

Если вы хотите полностью отключить автозаполнение, было бы разумно добавить autocomplete = "off" в поля, которые напрямую связаны с вашей логикой.

person jishi    schedule 08.02.2011
comment
Я также пробовал аналогичное решение, но проблема в том, что я установил текст, и после этого происходит автозаполнение хромом, снова помещая туда мои учетные данные ... - person Revious; 16.10.2014
comment
Chrome теперь отменяет отключение автозаполнения и решил, что для пользовательского интерфейса лучше всего использовать автозаполнение всего: - \ - person webdevinci; 03.05.2016

Если вы хотите получить поведение автозаполнения, но изменить стиль, возможно, вы можете сделать что-то вроде этого (jQuery):

$(window).load(function(){  
  if($('input:-webkit-autofill')){   
    $('input:-webkit-autofill').each(function(){
      //put your conditions here 
    });   
    // RE-INITIALIZE VARIABLES HERE IF YOU SET JQUERY OBJECT'S TO VAR FOR FASTER PROCESSING 
}});
person Lavlesh Mishra    schedule 12.12.2018

Вы пробовали использовать onpropertychanged вместо события onchange? Это только для IE, и это рекомендуемое исправление на MSDN.

person Satyajit    schedule 08.02.2011
comment
Я бы стал, но поскольку веб-сайт просматривают сотни тысяч людей во всех мыслимых браузерах, я не думаю, что это сработает очень хорошо. - person Glen Solsberry; 09.02.2011
comment
Это выглядит примерно так: stackoverflow.com/questions/343192/ - person Satyajit; 09.02.2011

На всякий случай, если кто-то все еще ищет решение (как и я сегодня), чтобы прослушать изменение автозаполнения браузера, вот собственный метод jquery, который я создал, просто для упрощения процесса при добавлении слушателя изменений во вход :

    $.fn.allchange = function (callback) {
        var me = this;
        var last = "";
        var infunc = function () {
            var text = $(me).val();
            if (text != last) {
                last = text;
                callback();
            }
            setTimeout(infunc, 100);
        }
        setTimeout(infunc, 100);
    };

Вы можете назвать это так:

$("#myInput").allchange(function () {
    alert("change!");
});
person LcSalazar    schedule 19.08.2014
comment
Хотя это решение будет работать, оно слишком дорогое для циклов процессора. Это лучшее решение. - person machineaddict; 04.03.2016

Вот довольно хорошее решение, которое делает что-то похожее на то, что описал jishi:

https://web.archive.org/web/20131125153914/http://furrybrains.com/2009/01/02/capturing-autofill-as-a-change-event/

Обновлена ​​неработающая ссылка со ссылкой на Wayback Machine.

person user2048344    schedule 22.02.2013