检测文本框字段更改jQuery

时间:2012-04-02 19:23:37

标签: javascript text

我有一个接受整数的文本框,只要用户在字段中输入数字,我就需要它来运行一个使用文本框输入的函数。

这里的问题是keyUp()将检测每个输入。因此,如果我输入23,则会为2触发一次,为3触发一次。我只需要在输入完成时运行它。

有没有办法做到这一点,没有失去焦点,也没有使用计时器,每次使用setInterval时都会检查文本框输入?

3 个答案:

答案 0 :(得分:0)

看起来您希望在用户停止输入时收到通知。以下代码可用作起点,在用户停止输入后调用bufferedKeyUp 300 ms。 http://jsfiddle.net/mendesjuan/VTMEe/

$(function() {
    // Creates a handler that will wait until the event hasn't fired for a period 
    // before it fires the actual event handler
    function createBuffered(fun, delay) {
        var timer;
        return function() {
            clearTimeout(timer);
            var args = arguments;
            var me = this;
            timer = setTimeout(function() {
               fun.apply(me, args);
            }, delay);        
        }
    }   

    $('#in').keyup( createBuffered(function(){
        console.log('change');
    }, 300));
});​

Ext-JS有一个很简单的方法来执行此操作http://jsfiddle.net/mendesjuan/DYkmU/1/

Ext.get('myid').on('keyup', function() {
  console.log('change');
}, null, {buffer: 300});

答案 1 :(得分:0)

为什么不在更改文本框内容之后测试文本框内容,在输入完成之后不是吗?

如果结果不合适,您可以随时清除并聚焦文本框,以便用户输入有效数据。

类似的东西:

$("textbox").change( function () {
    if (someTestForGoodData) {
        handleTheGoodData();
    } else {
        $(this).focus();
        alert($(this) + " has bad data!");
    }
})

答案 2 :(得分:0)

$('input').on('input propertychange', function() {
    $('#output').html($(this).val().length + ' characters');
});

来自this回答。