Using jQuery hotkeys, I try to bind shortcuts like Alt + H, Alt + C to some specific actions in my site. The event propagation stops (as it should) in all browsers but IE. First of all, is it possible to achieve this? If so, how?
这是一个代码示例:
jQuery(document).bind('keydown', 'Alt+H',
function (event)
{
$this.toggleMenu( 'H' );
if(jQuery.browser.msie) {
event.cancelBubble = true;
}
else
{
event.stopPropagation();
}
return false;
} );
在 IE 中,该行$this.toggleMenu( 'H' );
被执行,但随后cancelbubble
似乎没有效果(浏览器打开其“帮助”菜单)
尝试这总是一件奇怪的事情(由于浏览器的内置热键等),但我很幸运地使用了 onKeyUp 事件。
keydown 的问题在于它一次可能只发送一个密钥。因此,如果您按下 ALT,它是按键按下的一个触发器,然后 C 是第二个触发器。 KeyPress 在某些环境中也存在问题,因为像 ALT 和 CTRL 这样的修饰键不计为按键(我想..有人能更好地解释这一点吗?)。
如果您使用 keyup,您可以检查是否按住 ALT,同时检查该键。仍在解决问题,但试试这个(我只在 win7:ie9 和 chrome 中验证):
$(window).keyup(function (e)
{
// warning: only tested with EN-US keyboard / locale
// check whether ALT pressed (and not ALT+CTRL, ALT+SHIFT, etc)
var key = e.key || String.fromCharCode(e.keyCode);
if (e.altKey && !e.ctrlKey && !e.shiftKey && key)
{
// if ALT pressed, handle the keycode shortcut
var keyPressed = key.toUpperCase(); // normalize input
switch (keyPressed)
{
case "C":
// do stuff for ALT-C
break;
case "H":
// do stuff for ALT-H
break;
}
}
});
问题/疑问:
- 使用jQuery,但纯JS解决方案并不太复杂
- 是否可以通过取消来防止默认浏览器行为
事件?
- 它可以在 Chrome 和 IE9 以外的浏览器中运行吗? (可能是 FF 和
苹果浏览器)
- 如果用户在释放字母键之前释放 ALT 键,则不会
工作
- 如果用户在按 ALT 键之前按字母键,则不起作用
- 尝试使用 ACCESS KEY 属性,但这只会设置焦点..我想要
单击超链接和/或触发一些基于 click() 事件的元素
在某些 ALT-X 组合上。
- 虽然这对于企业 Web 应用程序来说可能是可以接受的(因为
区域设置和浏览器支持通常是较窄的焦点,并且由于用户
通常接受过软件培训),这可能无法接受
网站(由于使用大量浏览器,本地化
增加复杂性的担忧,等等)......必须考虑一下
多一点。
希望这对某人有帮助……请随意提出建设性的批评,因为这是我在构建网络应用程序时客户总是询问的功能。 (他们习惯了 80 年代和 90 年代遗留的表单驱动应用程序,并且需要广泛的键盘支持,这是可以理解的,尤其是当他们为此付费时!)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)