javascript - 如果已经触发了另一个事件,则不要触发一个事件

标签 javascript jquery jquery-events

我有这样的代码:

$('#foo').on('click', function(e) {
   //do something
});

$('form input').on('change', function(e) {
  //do some other things
));

第一个和第二个事件实际上对相同的输入字段执行相同的操作,但方式不同。问题是,当我单击 #foo 元素时,表单更改元素也会触发。我需要在输入内容发生变化时始终触发表单更改,而不是在单击 #foo 元素时触发。

这就是问题 ))。如何做到这一点?

这是 jsfiddle 上的代码:http://jsfiddle.net/QhXyj/1/

最佳答案

发生的事情是当焦点离开#input 时触发onChange。在您的情况下,这与单击按钮一致。尝试按 Tab,然后单击按钮。

要处理这种特殊情况,一种解决方案是延迟对 change 事件的调用,以充分检查是否同时单击了按钮。实际上 100 毫秒有效。这是代码:

$().ready(function() {

    var stopTheChangeBecauseTheButtonWasClicked = false;
    $('#button').on('click', function(e) {
        stopTheChangeBecauseTheButtonWasClicked = true;
        $('#wtf').html("I don't need to change #input in this case");
    });

    $('#input').on('change', function(e) {
        var self = this;
        setTimeout(function doTheChange() {
            if (!stopTheChangeBecauseTheButtonWasClicked) {
                $(self).val($(self).val() + ' - changed!');
            } else {
                stopTheChangeBecauseTheButtonWasClicked = false;
            }
        }, 100);
    });
});

还有 fiddle - http://jsfiddle.net/dandv/QhXyj/11/

关于javascript - 如果已经触发了另一个事件,则不要触发一个事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13330229/

相关文章:

javascript - 为 HOC 编写流 libdef

jquery - 从 iframe 向下滚动到部分

javascript - 无法使用 Jquery 清空 div

javascript - 如何使用 JavaScript/jQuery 根据表中的值更改 td 背景颜色?

javascript - jQuery - 显示div的出现次数

javascript - 有谁知道这个(谷歌帮助)是怎么称呼的

javascript - 在 JavaScript 中将一系列 DOMNodeInserted 事件作为单个事件处理

javascript - 如何使用 jQuery 在我的案例中隐藏和显示?

javascript - 使用 redux saga 在 React Native 中实现 token 刷新

javascript - Jquery 自动完成建议 - 小字体列表