首页 > 解决方案 > 关键事件在 Chrome 中有效,但在 Internet Explorer 11 中无效

问题描述

我编写了一个简单的函数,如果触发了诸如 PrintScreen 和 Windows 键之类的键,它将在网页上隐藏我的文档。

这是代码:

document.onkeydown = windowskey;
document.onkeyup = printscreenkey;


function windowskey(e) {
  switch (e.which) {
    case 91: // left windows
    case 92: // right windows
      $("#documentViewer").hide();

      break;
  }
}

function printscreenkey(e) {
  switch (e.which) {
    case 44: // print screen
      copyToClipboard();
      $("#documentViewer").show();

      break;
    case 91: // left windows
    case 92: // right windows
      $("#documentViewer").show();

      break;
  }


}

此功能在 Chrome 浏览器上运行良好,但我尝试在 IE11 等其他浏览器上对其进行测试,当我按下这些键时它没有响应或触发任何事件。

我真的想让它标准化,以便它在所有浏览器上都一样。

我在这里犯了什么错误吗?

标签: javascriptjqueryjsp

解决方案


并非所有浏览器都支持e.which,但 jQuery 完全支持它。但是,在这种情况下,它不是 jquery 事件document.onkeydown = windowskey;

我建议你使用e.keyCode(或两者)

var keyCode = e.which || e.keyCode; // fallback to e.keyCode
switch (keyCode) {
  case 91:
  case 92:
    // ...
    break;
  }

我还建议您使用 e.key(而不是 e.keyCode),这使您的代码更具可读性/可理解性,并且它具有不错的浏览器支持 IE9+:developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent /钥匙

switch (e.key) {
  case "Down": // IE/Edge specific value
  case "ArrowDown":
    // Do something for "down arrow" key press.
    break;

推荐阅读