使用jQuery热键,我尝试将 Alt + H , Alt + C 等快捷方式绑定到某些我网站中的具体操作。除IE之外,事件传播在所有浏览器中停止(应该如此)。首先,是否有可能实现这一目标?如果是这样,怎么样?
以下是代码示例:
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
似乎没有效果(浏览器打开其“帮助”菜单)
答案 0 :(得分:1)
这总是一个奇怪的尝试(由于浏览器的内置热键等),但我很幸运使用了onKeyUp事件。
keydown的问题在于它一次只能发送一个密钥。因此,如果你点击ALT它是keydown的一个触发器,然后C是第二个触发器。 KeyPress在某些环境中也有probs,因为像ALT和CTRL这样的修饰键不算作按键(我想......任何人都可以更好地解释这个吗?)。
如果您使用键盘,您可以在检查键时检查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;
}
}
});
问题/问题:
希望这有助于某人......随意提出建设性的批评,因为这是客户在构建网络应用程序时总是询问的功能。 (他们习惯于80年代和90年代的传统表单驱动应用程序,并且需要大量的键盘支持,这是可以理解的,特别是当他们为此付费时!)