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

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

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

Ответ 1

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

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

Ответ 2

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

Ответ 3

На всякий случай кто-то все еще ищет решение (так же, как я был сегодня), чтобы прослушать изменение автозаполнения браузера, вот настраиваемый метод 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!");
});

Ответ 4

Если вы хотите получить поведение автозаполнения, но изменить стиль, возможно, вы можете сделать что-то вроде этого (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 TO VAR FOR FASTER PROCESSING 
}});