首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >筛选'onchange‘'onkeypress’

筛选'onchange‘'onkeypress’
EN

Stack Overflow用户
提问于 2013-07-01 19:29:36
回答 2查看 2.1K关注 0票数 0

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

代码语言:javascript
复制
      $(op.$txtBox).on('change keypress', function (e) {
            if ((e.keyCode == 13 && e.type == 'keypress')  || e.type == 'change') {
                localWidget._rebindGrid();
            }
        });
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-01 19:57:27

请改用keyup事件。

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

DEMO

代码语言:javascript
复制
(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
EN

Stack Overflow用户

发布于 2013-07-01 19:40:27

使用这样的事件:

代码语言:javascript
复制
$(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()函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17403420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档