过滤'onchange''onkeypress'

时间:2013-07-01 11:29:36

标签: javascript javascript-events jquery

如果两个事件都被触发,有没有办法如何处理其中一个事件?如果我改变了值并按下键,我最终重新绑定网格两次,因为事件按顺序到达。我明白我得到的是正确的行为,我得到了我要求的东西,但我需要一种方法来阻止第二个事件的传播。我正在寻找事件级别的解决方案(不是isGridBinded标志)。

      $(op.$txtBox).on('change keypress', function (e) {
            if ((e.keyCode == 13 && e.type == 'keypress')  || e.type == 'change') {
                localWidget._rebindGrid();
            }
        });

2 个答案:

答案 0 :(得分:1)

改为使用keyup事件。

否则,我能想到的唯一方法是使用超时来限制它:

DEMO

(function () {
    var timeout;
    $('input').on('change keypress', function (e) {
        clearTimeout(timeout);
        timeout = setTimeout(function () {
            if ((e.keyCode == 13 && e.type == 'keypress') || e.type == 'change') {
                console.log(1);
            }
        }, 0);
    });
})();

答案 1 :(得分:0)

使用类似的事件:

$(op.$txtBox).on({
    change: function(){
          localWidget._rebindGrid();
     },
     keypress: function(e){
         if(e.keyCode == 13)
            localWidget._rebindGrid();
     },
});

参考: JQuery .on() method with multiple event handlers to one selector

或者您可以使用jquery的bind()函数。