【问题标题】:Prevent focus to URL bar with CTRL + L使用 CTRL + L 防止焦点到 URL 栏
【发布时间】:2015-05-22 06:54:21
【问题描述】:

我正在使用引导程序开发类似终端的模式,我想在用户按下 Ctrl+L 时清除它,就像他写 @ 时一样987654323@在里面。
但问题是,当我按下 Ctrl+L 时,它会聚焦 URL 栏,而我的页面不再聚焦。
在这部分,alert 正在显示,但它仍然聚焦在 URL 栏之后:

if(event.key == "l" && event.ctrlKey)
    alert("clear it");

我已经尝试了几件事,比如在一秒钟后聚焦我的终端,或者类似的事情。但没有任何效果。
你有什么想法吗?谢谢你!

【问题讨论】:

  • 在 if 条件中尝试 e.preventDefault()return false
  • 我讨厌 Web 应用程序像这样覆盖标准浏览器快捷方式。 Chrome 中的 Flash 可以做到这一点,而且真的很烦人。
  • 好点,这可能是可以的例外情况。

标签: javascript


【解决方案1】:

嗯,这并不像我想象的那么难。
唯一有效的是e.preventDefault(),我试过return false,但没有。

if(event.key == "l" && event.ctrlKey)
{
    event.preventDefault();
    // ...
    // what I wanted to do
}

感谢大家的快速回答,特别感谢Pawan

【讨论】:

  • 旁注:不适用于keyup。仍然关注 URL 栏。但是,是的,适用于 keydown
【解决方案2】:

我同意 Barmar 的观点,但请看:

document.addEventListener("keydown", function(e) {
if ((navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey) && e.keyCode === 76) {
    e.preventDefault();
    return false;
}

return true;
});

http://jsfiddle.net/L8L23u9v/

【讨论】:

    【解决方案3】:

    这可能会有所帮助。但是如果你按 L 两次而不离开 Ctrl 它将不起作用。

    抱歉,我使用的是 jQuery,但我希望你明白其中的逻辑。

    var key = '';
    $(document).on('keydown', function(e) {
      key += e.keyCode;
      console.log(key);
      if (key === '9176' || key === '1776'){
        key = '';
        console.log('stopped');
        return false;
      }
    });
    $(document).on('keyup', function(e) {
      key = '';
    });
    

    一个例子http://jsbin.com/xicegu/3/edit

    【讨论】:

    • 91 是 mac 中 cmd 的键码。因为这是一种可能性,所以我添加了它:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2011-08-30
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多