【问题标题】:Vanilla JavaScript: Disabling a given preexisting key-combo in a webpageVanilla JavaScript:禁用网页中给定的预先存在的组合键
【发布时间】:2019-03-26 06:15:24
【问题描述】:

在这个随机的English-Wikipedia edit page 中可以添加一些内容(比如“测试”),然后通过 Alt+Shift+S 的预先存在的组合键保存它。

我希望特别阻止这种行为(不删除带有document.querySelector("#wpSave").remove(); 的保存按钮)。

我尝试了以下失败的代码:

// ==UserScript==
// @name         wiki
// @match        https://*.wikipedia.org/*
// ==/UserScript==

document.addEventListener("DOMContentLoaded", ()=>{
    document.addEventListener('keypress', function(e) {
        if (e.key == 16 && e.key == 18 && e.key == 83) {
            return false;
        }
    });
});

我也尝试用e.preventDefault()evt.stopPropagation() 替换return false,但都失败了(没有控制台错误)。

代码有什么问题?


注意:此问题与 this one 的不同之处在于,它通常侧重于禁用给定的预先存在的组合键功能,而不是保存功能 .


dotoconor 更新

我在控制台中使用了这个,但我仍然遇到同样的问题:

document.addEventListener("DOMContentLoaded", ()=>{
    const state = {};
    document.addEventListener('keydown', function(e) {
        state[e.key] = true;
    });

    document.addEventListener('keyup', function(e) {
        state[e.key] = false;
    });

    document.addEventListener('keyup', function(e) {
        state[e.key] = false;
        if (state["Alt"] && state["Shift"] && (state["S"] || state["s"])) {
            return e.preventDefault();
        }
    });
});

【问题讨论】:

标签: javascript jquery html return keyboard-shortcuts


【解决方案1】:

一次只会出现一个关键事件,因此您必须创建一个状态机来确定哪些是开启和关闭的。 考虑一下:

const state = {};
document.addEventListener('keydown', function(e) {
  state[e.key] = true;
});


document.addEventListener('keyup', function(e) {
  state[e.key] = false;
});

现在有了这个,你可以检查你想要的键是否一次都被按下,然后防止最后一次按键进入 DOM。

document.addEventListener('keyup', function(e) {
  state[e.key] = false;
  if (state["Alt"] && state["Shift"] && (state["S"] || state["s"])) {
    return e.preventDefault();
  }
});

【讨论】:

  • 有问题,你在这里吗?
  • 我已经用我使用的代码更新了问题,请在那里查看。
猜你喜欢
  • 2019-03-26
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 2012-03-15
  • 2013-06-25
相关资源
最近更新 更多