Я хочу вызвать событие каждый раз, когда данные меняются в поле ввода текста HTML, независимо от фокуса - PullRequest
1 голос
/ 07 мая 2009

Как вы ловите событие на стороне клиента, когда браузер изменяет поле ввода текста, используя функцию автозаполнения браузера для простого поля ввода HTML? (Это небольшой выпадающий список полей ввода, предоставленный браузером, я знаю, что вы можете отключить его с помощью «autocomplete = off» в некоторых браузерах для каждого поля ввода.)

Я уже привязан к событию "change / keyup", но они не обрабатывают случай, когда пользователь начинает вводить значение и использует собственное автозаполнение браузера для заполнения оставшейся части поля в фокусе поля.)

Ответы [ 3 ]

4 голосов
/ 07 мая 2009

Единственный надежный способ, позволяющий всегда отлавливать ВСЕ изменения независимо от того, как они сделаны, - использовать setInterval. Однако это несколько загружает процессор, поэтому вы, вероятно, захотите сохранить селектор более минимальным, чем этот.

setInterval( function() {
    $('input').each( function() {
        if ($(this).val() != $(this).attr("_value")) {
            // Save the new value
            $(this).attr("_value", $(this).val());

            // TODO - Handle the changed value
        }
    });
}, 100);
1 голос
/ 07 мая 2009

Я удивлен, что событие 'change' не срабатывает, если честно ...

В любом случае, Plutor имеет правильную идею. Более дружественная к процессору версия его ответа:

var value,
    elem = $('input[name=email]')[0];
setInterval(function(){
    if (elem.value !== value) { /* do something */ }
    value = elem.value;
}, 100);
0 голосов
/ 23 июля 2015

Вы можете вызвать вашу функцию в вашей функции в следующий раз через много секунд, попробуйте это:

function startTime() {
    var today=new Date();
    var h=today.getHours();
    var m=today.getMinutes();
    var s=today.getSeconds();
    m = checkTime(m);
    s = checkTime(s);
    document.getElementById('txt').innerHTML = h+":"+m+":"+s;
    var t = setTimeout(function(){startTime()},500);
}

function checkTime(i) {
    if (i<10) {i = "0" + i};  // add zero in front of numbers < 10
    return i;
}
<!DOCTYPE html>
<html>
<head></head>
<body onload="startTime()">

<div id="txt"></div>

</body>
</html>

ссылка: http://www.w3schools.com/js/tryit.asp?filename=tryjs_timing_clock

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...