我希望每次在HTML文本输入字段中更改数据时触发事件,而不管焦点如何

时间:2009-05-07 15:28:22

标签: javascript jquery html ajax

当浏览器使用浏览器的纯HTML输入字段的自动完成功能更改输入文本字段时,如何捕获客户端事件? (这是浏览器提供的输入字段的小下拉菜单,我知道您可以在每个输入字段的某些浏览器中使用“autocomplete = off”禁用它。)

我已经绑定了“change / keyup”事件,但是当用户开始键入值并使用浏览器的本机自动完成功能来填充其余字段时,这些事件并不处理(并且保持不变)在该领域的焦点。)

3 个答案:

答案 0 :(得分:4)

我知道总是捕获所有更改的唯一万无一失的方法,无论它们如何完成,都是使用setInterval。但这有点像CPU,所以你可能想要让选择器保持最小化。

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 :(得分:1)

我很惊讶“改变”事件不诚实......

无论如何, Plutor 有正确的想法。他的答案更加CPU友好版本:

var value,
    elem = $('input[name=email]')[0];
setInterval(function(){
    if (elem.value !== value) { /* do something */ }
    value = elem.value;
}, 100);

答案 2 :(得分:0)

你可以在几秒钟之后在你的函数中调用你的函数,试试这个:



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;
}
&#13;
<!DOCTYPE html>
<html>
<head></head>
<body onload="startTime()">

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

</body>
</html>
&#13;
&#13;
&#13;

参考是:http://www.w3schools.com/js/tryit.asp?filename=tryjs_timing_clock