如果两个事件都被触发,有没有办法如何处理其中一个事件?如果我改变了值并按下键,我最终重新绑定网格两次,因为事件按顺序到达。我明白我得到的是正确的行为,我得到了我要求的东西,但我需要一种方法来阻止第二个事件的传播。我正在寻找事件级别的解决方案(不是isGridBinded标志)。
$(op.$txtBox).on('change keypress', function (e) {
if ((e.keyCode == 13 && e.type == 'keypress') || e.type == 'change') {
localWidget._rebindGrid();
}
});
答案 0 :(得分: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);
});
})();
答案 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()函数。