防止IE9默认键盘操作处理

3
我希望禁用一些默认浏览器快捷键(CTRL + F,ALT + ENTER),因为它们在我的应用场景中没有意义。从我所了解的内容来看,禁用IE9中这些事件最重要的是在此情况下将keyCode设置为0,但是当我这样做时,总是会出现“Access denied”错误。
这是我的代码:
var fnOnKeyDown = function(event)
{
  if(!event)
  {
    event = window.event;
  }
  if(event.preventDefault)
  {
    event.preventDefault();
  }
  event.returnValue = false;
  event.cancelBubble = true;
  event.keyCode = 0;      
  return false;  
};

window.document.onkeydown = fnOnKeyDown;

如上所述,事件行event.keyCode = 0会引发错误“拒绝访问”。当我将其移除或放入空的try/catch块中时,它不会再抛出错误,但默认的浏览器键处理不再被抑制。


我不是Windows。这些也无法通过吗?;http://jsfiddle.net/Allendar/wHvRb/ - user1467267
这在使用jQuery时也可能很有用;http://code.google.com/p/js-hotkeys/downloads/list - user1467267
尝试在事件对象中使用元键?Windows和Mac之间有区别。 - Herrington Darkholme
2个回答

1

你确定你不是指IE7吗?在IE9中我似乎没有遇到过问题...

无论如何,这是微软关于你的问题的文章

http://support.microsoft.com/kb/934364

为了解决这个问题,需要更改分配 event.keyCode 属性的代码,使其不改变值。更改代码后,您可以使用 SHIFT 键或 CTRL 键从本地磁盘加载页面。
另外,您也可以将网页存储在 Web 服务器上,确保脚本中的 event.keyCode 属性能够正确运行。
如果可能的话,建议使用 jQuery 等框架。这样的框架通常通过一个公共接口来处理浏览器的各种问题。

1

event.preventDefault()event.stopPropagation()应该就足够了 - 你不需要改变事件本身的任何属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接