【问题标题】:Can I prevent keyup event after a keydown in javascript?我可以在javascript中按键后阻止按键事件吗?
【发布时间】:2018-11-19 17:19:28
【问题描述】:

keydown-keyup js 事件有关联吗?我可以在 keydown 期间控制一个事件以防止同一键的下一个 keyup 事件吗?

$(document).keydown(function (e) {
   if(some_condition)
       e.preventDefault(); //I don't want keyup after this
}).keyup(function (e) {
   if(keydown_was_prevent_default) {
       alert("Exit without keyup!");
       return false;
   }
});

【问题讨论】:

  • 只删除keyup事件?
  • 我编辑了我的问题以更好地解释,我必须控制相同的手势/键,当我按下一个按钮时,在某些情况下,我想阻止下一个键(同一个键! )。这就是为什么我想知道这两个事件 keyup/down 是否相关。

标签: javascript jquery keyevent


【解决方案1】:

它们没有连接。

您可以使用变量在它们之间传递状态。

(function () { // IIFE to avoid making `block_keys` a global

    let block_keys = false;

    $(document).on("keydown", event => {
        if (some_condition()) {
            block_keys = true;
        } else {
            block_keys = false;
        }
    });

    $(document).on("keyup", event => {
        if (block_keys) {
            event.preventDefault();
        }
    });

}());

如果您要在 元素上执行此操作,我可能会使用 data() 来存储状态,以便它直接与元素相关联。

【讨论】:

  • 我想阻止同一个键控,而不是其他所有键控。
  • @Tobia — 这就是它的作用。如果您在按键按下时设置block_keys,它将在按键释放时处于该状态......而不是在释放时,再次按下,然后再次释放。
  • 如果我按以下顺序触发这些事件会发生什么:keydown(Akey)、keydown(Bkey)、keyUp(Bkey)、keyUp(Akey)?如果 Akey 有“some_condition”,它也会锁定 B-keyup 事件。
  • 我在这里用这个小提琴解释为什么这个解决方案不起作用:jsfiddle.net/a0ux7dqf(使用的条件只是一个例子)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多