jQuery keypress()事件没有触发?

时间:2009-01-29 18:39:04

标签: javascript jquery internet-explorer

我试图用jQuery在右箭头键和左箭头键上按下一个事件。使用以下代码,我可以在任何字母数字键上触发事件,但光标键(向上,向下,向左,向右)不会触发任何内容。我正在为IE用户开发该网站,因为它是一个业务线应用程序。我在这里做错了吗?

$('document').keypress(function(e){
    switch (e.which) {
        case 40:
            alert('down');
            break;
        case 38:
            alert('up');
            break;
        case 37:
            alert('left');
            break;
        case 39:
            alert('right');
            break;
        default:
            alert('???');  
            }      
});

5 个答案:

答案 0 :(得分:47)

e.which 在IE中无法运行 e.keyCode ,如果你的目标是IE,你可能也想用keydown()而不是keypress()

有关详细信息,请参阅http://unixpapa.com/js/key.html

答案 1 :(得分:41)

使用jQuery,我已经完成了this way

function checkKey(e){
     switch (e.keyCode) {
        case 40:
            alert('down');
            break;
        case 38:
            alert('up');
            break;
        case 37:
            alert('left');
            break;
        case 39:
            alert('right');
            break;
        default:
            alert('???');  
            }      
}

if ($.browser.mozilla) {
    $(document).keypress (checkKey);
} else {
    $(document).keydown (checkKey);
}

另外,试试这些插件,看起来它们可以帮助你:

http://www.openjs.com/scripts/events/keyboard_shortcuts

http://www.webappers.com/2008/07/31/bind-a-hot-key-combination-with-jquery-hotkeys/

答案 2 :(得分:13)

你在字符串中有'document'这个词。变化:

$('document').keypress(function(e){

$(document).keypress(function(e){

答案 3 :(得分:2)

当然这是一个封闭的问题,我想在你的讨论中添加一些内容

在mozilla中,我发现了这段代码的奇怪行为

$(document).keydown(function(){
//my code 
});

代码被触发两次。在调试时,我发现实际上有两个事件被触发:'keypress'和'keydown'。我禁用了其中一个事件,代码显示了我预期的行为。

$(document).unbind('keypress');
$(document).keydown(function(){
//my code
});

这适用于所有浏览器,也无需检查特定于浏览器(if($。browser.mozilla){})。

希望这可能对某人有用

答案 4 :(得分:2)

您的原始代码有$('文档')...它应该有$(文档)而没有引号。