如果这两个事件都被触发,有没有办法只处理其中一个事件?如果我改变值并按下键,我会重新绑定网格两次,因为事件是按顺序到达的。我知道我得到的是正确的行为,我得到了我所要求的,但我需要一种方法来阻止第二个事件的传播。我正在寻找事件级别的解决方案(不是isGridBinded标志)。
$(op.$txtBox).on('change keypress', function (e) {
if ((e.keyCode == 13 && e.type == 'keypress') || e.type == 'change') {
localWidget._rebindGrid();
}
});发布于 2013-07-01 19:57:27
请改用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);
});
})();发布于 2013-07-01 19:40:27
使用这样的事件:
$(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()函数。
https://stackoverflow.com/questions/17403420
复制相似问题