jQuery: какой прослушиватель я использую для проверки автоматического заполнения браузера полем ввода пароля?

у меня есть простая проблема, которую я не могу найти решение.

в основном на этом сайте здесь:http://dev.supply.net.nz/vendorapp/ (в настоящее время в разработке) У меня есть некоторые фантазии label анимации скольжения вещи В и из на focus & blur.

однако, как только пользователь вошел в систему, браузер, скорее всего, запомнит пароль, связанный с адресом электронной почты/логином пользователей. (Что хорошо и не должно быть нетрудоспособный.)

однако я сталкиваюсь с проблемами, вызывающими мой label слайд из анимации, когда браузер устанавливает значение #password поле автоматически, как событие, для этого не является ни focus, ни blur.

кто-нибудь знает, какой слушатель использовать для запуска моей функции, когда браузер "автоматически заполняет" пароль пользователя?

вот скриншот проблемы:

Проблема С Меткой Автозаполнения Пароля http://dl.dropbox.com/u/376243/fill_issue.png

3 ответов


недавно я прочитал статью под названием захват автозаполнения как событие изменения это может быть то, что вы ищете. Автор создал функцию под названием listenForChange() который контролирует поле для автозаполнения формы (является ли автозаполнение даже словом?). Поскольку он проверяет вашу форму очень часто, я лично предлагаю вам запускать это только определенное количество раз. В конце концов, автозаполнение формы обычно будет делать свою работу, как только страница закончена погрузка.

цитирование оригинальной статьи:

плагин использует функции trigger() и data (). В двух словах, мы делаем петлю над входным элементом или набором элементов входного сигнала детей, хранить их начальное значение в кэше данных предоставлено функцией data (). Мы затем проверьте, сохранено ли значение соответствует значению входных данных во время текущая итерация. Если да, то да. ничего, если нет, мы вручную увольняем событие change via trigger(). Есть также немного логики, чтобы игнорировать элемент, который имеет фокус. Мы не нужно беспокоиться об этом элементе, так, если значение изменяется при пользователь имеет фокус, событие изменения будет уволен как обычно, когда элемент размыт.

и вот сама функция, если вы не хотите идти и читать статью (которую вы должны):

(function($) {
    $.fn.listenForChange = function(options) {
        settings = $.extend({
            interval: 200 // in microseconds
        }, options);

        var jquery_object = this;
        var current_focus = null;

        jquery_object.filter(":input").add(":input", jquery_object).focus( function() {
            current_focus = this;
        }).blur( function() {
            current_focus = null;
        });

        setInterval(function() {
            // allow
            jquery_object.filter(":input").add(":input", jquery_object).each(function() {
                // set data cache on element to input value if not yet set
                if ($(this).data('change_listener') == undefined) {
                    $(this).data('change_listener', $(this).val());
                    return;
                }
                // return if the value matches the cache
                if ($(this).data('change_listener') == $(this).val()) {
                    return;
                }
                // ignore if element is in focus (since change event will fire on blur)
                if (this == current_focus) {
                    return;
                }
                // if we make it here, manually fire the change event and set the new value
                $(this).trigger('change');
                $(this).data('change_listener', $(this).val());
            });
        }, settings.interval);
        return this;
    };
})(jQuery);

весь кредит идет к владельцу FurryBrains.com для письма статья.


также вы, вероятно, также должны поставить слушателя на изменение:

$('#password').change(function() {
    // DEAL WITH IT IF THERE IS CONTENT IN IT AND THE LABEL IS STILL THERE
});

вам придется вручную запустить событие в вашей .ready ()

var $p = $('#password');
if($p.val() != '') {
  $('#password').focus();
}