jQuery keypress() 事件没有触发?

IT技术 javascript jquery internet-explorer
2021-02-08 10:08:42

我正在尝试使用 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个回答

e.which在 IE 中不起作用尝试e.keyCode,如果您的目标是 IE,您可能还想使用 keydown() 而不是keypress () 。

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

jQuery 规范了 .which 属性,因此您可以可靠地使用它来检索关键代码。 keyup()在 IE11 的 IE10 文档模式下使用 jQuery 2.1.0 对我有用。
2021-03-22 10:08:42
很好的答案对我帮助很大。
2021-03-26 10:08:42
我仍然得到相同的结果。字母数字键都触发默认情况,但箭头键不触发任何内容,甚至不触发默认情况。无论出于何种原因,我认为主要的 keypress() 事件没有触发。
2021-03-30 10:08:42
keydown并且keypress不等价。你暗示它们是可以互换的,当它们不是的时候。这个软件相当于“如果你这样举起胳膊疼,那就别这样举起来”
2021-04-08 10:08:42

使用 jQuery,我是这样做的

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/

关于 keypress 和 keydown 取决于浏览器的那一行是至关重要的。
2021-03-25 10:08:42
哇; 大量搜索,这是我发现的唯一一个讨论与浏览器支持 keypress/keydown 的差异的回复
2021-04-05 10:08:42

字符串中有“文档”一词。改变:

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

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

您的原始代码有 $('document')... 当它应该有没有引号的 $(document) 时。

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

在 mozilla 中,我观察到此代码的奇怪行为

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

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

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

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

希望这可能对某人有用