【问题标题】:How can I prevent Ctrl-- and Ctrl-+?如何防止 Ctrl-- 和 Ctrl-+?
【发布时间】:2014-04-24 15:17:48
【问题描述】:

Google Chrome 有键绑定 Ctrl-- 用于减小字体大小和 Ctrl-+ 用于增加字体大小。我想阻止他们。我发现他们绑定到<body>,我做到了:

document.body.addEventListener('keyup',
  function(obj, e){e.preventDefault();}, false);

但似乎在将事件发送到这些处理程序之前触发了 in/decreshing 字体大小,并且在运行 preventDefault() 时,它们已经完成,我的尝试失败了。如何防止这些默认绑定

致(潜在的)反对者:仔细阅读我上面的问题。我从来没有写过我想完全防止缩放。我想将这些功能与我提到的特定组合键解除绑定。如果您认为不应该释放 Ctrl--,那么为什么 Ace editor 会使用 Ctrl- 提供 emacs 键绑定- 一定要撤消吗?您是否声称 Ace 编辑器的开发人员(包括 Mozilla Firefox 开发人员等)正在做一些无用的事情?你是说你比他们高人一等吗?即使您的建议是不这样做,为什么要投反对票而不是将其写为答案?

【问题讨论】:

  • 为什么要阻止它?这是一项重要的辅助功​​能。
  • 您必须使用 keydown。然而,你正在打一场失败的战斗。如果有人正在放大您的网站,那是因为他们需要这样做才能阅读它。您正在影响可访问性
  • 为了防止它......这不是你的问题吗? (顺便说一句,我更新了我的评论,我输入得太快了)
  • 在问题中指出您正试图将该组合键重新绑定到不同的行为可能很重要。就目前而言,听起来您只想禁用浏览器的缩放功能。
  • 您正在特别影响用户的缩放能力。这使它与您的问题非常相关。

标签: javascript google-chrome events preventdefault


【解决方案1】:

如果您绑定到keydown 事件并使用e 作为第一个参数,则此代码将起作用:

document.body.addEventListener('keydown', function(e) {
    e.preventDefault();
}, false);

Demonstration

请注意,此方法不会禁用浏览器的缩放功能,它只是阻止所有键盘快捷键的默认行为。例如,您仍然可以使用 Ctrl+鼠标滚轮进行缩放。

【讨论】:

  • 由于社区的负面反应,我花了一段时间才意识到已经给出了答案。
【解决方案2】:

这个使用 jQuery 并检查是否:Ctrl 键被按下和 +/- 按钮被按下。 p>

$(document).keydown(function(e) {
    if(e.ctrlKey
       && (e.which == 107 || e.which == 109 || e.which == 187 || e.which == 189))
    {
        e.preventDefault();
        return false;
    }
});

【讨论】:

  • 这比我最初的想法要好,因为它选择性地取消绑定特定功能。
猜你喜欢
  • 2011-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多