0

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

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

2 回答 2

1

请改用 keyup 事件。

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

演示

(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);
    });
})();
于 2013-07-01T11:57:26.567 回答
0

使用这样的事件:

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

参考: JQuery .on() 方法与多个事件处理程序到一个选择器

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

于 2013-07-01T11:40:27.467 回答