javascript - 关键事件在 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 等其他浏览器上对其进行测试,当我按下这些键时它没有响应或触发任何事件。
我真的想让它标准化,以便它在所有浏览器上都一样。
我在这里犯了什么错误吗?
解决方案
并非所有浏览器都支持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;
推荐阅读
- javascript - 如何在 React 中创建可排序的表?如何从排序的对象访问类方法?
- javascript - Chrome 中的并发 Ajax 请求
- python - 在 Python 中将字符串十进制 ("anyValueD+anyValue) 转换为数值十进制
- javascript - 如何从内部回调返回 webRequest
- go - 在go中找不到来自url的公共文件
- r - Abline 不画线以绘制最小回归线
- javascript - 如何安装 NodeJS 包 node-parquet?
- python-3.x - 通过网络摄像头使用 OpenCV 捕获图像
- string - 是否可以在 Haskell 中将函数 putStrLn 应用于字符串列表的每个元素,让它打印到屏幕上,同时是非递归的
- javascript - 在消费者之外更新反应上下文?