1

我正在尝试将 a 附加.keyup(e)到向上和向下箭头。它在 Firefox 中运行良好,但在 Safari 中却不行。所有其他箭头在 Safari 中都可以正常工作。

$(document.documentElement).keyup(function (event) {

        if (event.keyCode == 37) 
        {
        // go left
            $('.left').click();
        } 
        else if (event.keyCode == 39) 
        {
        // go right
            $('.right').click();
        }
        else if (event.keyCode == 38) 
        {
        // next project
            $('a.up div.arrow').click();
        }
        else if (event.keyCode == 40) 
        {
        // previous project
            $('a.down div.arrow').click();
        }
        else if (event.keyCode == 32) 
        {
        // info
            $('aside').click();
        }
    });

编辑:我的网站的工作演示链接 - http://www.ryan-neil.com

应该早点补充...

4

2 回答 2

2

工作演示请在这里尝试我在 OSX lion safari 上,它可以工作:http: //jsfiddle.net/DRgRv/1/

因此,单击灰色框,然后使用向上和向下箭头键进行导航:

如果这有帮助,别忘了投票并接受。

代码

$(document).keyup(function(e) {
    switch (e.which) {
    case 37:
        $('div').stop().animate({
            left: '-=10'
        }); //left arrow key
        break;
    case 38:
        $('div').stop().animate({
            top: '-=10'
        }); //up arrow key
        break;
    case 39:
        $('div').stop().animate({
            left: '+=10'
        }); //right arrow key
        break;
    case 40:
        $('div').stop().animate({
            top: '+=10'
        }); //bottom arrow key
        break;
    }
})​
于 2012-05-24T08:41:49.263 回答
1

您使用的是哪个版本的 Safari

jquery 支持关于浏览器兼容性

jQuery 积极支持这些浏览器:

Firefox Current - 1 version
Internet Explorer 6+
Safari Current - 1 version
Opera Current - 1 version
Chrome Current - 1 version 

它们的任何问题都应该被视为 jQuery 中的错误并报告。

存在以下已知问题:

Mozilla Firefox 1.0.x
Internet Explorer 1.0-5.x
Safari 1.0-2.0.1
Opera 1.0-9.x
Konqueror 

jQuery 通常与 Konqueror 和 Firefox 1.0.x 一起使用,但由于我们没有定期测试它们,因此可能会有一些意想不到的错误。

你可以测试关键事件

在这里尝试测试

或在这里

你仍然可以尝试像这样从stackoverflow中的另一篇文章中破解它

按键是一个令人困惑的事件。虽然 keydown 和 keyup 会告诉您键盘上的哪个特定键已按下或刚刚恢复,但 keypress 事件应该告诉您屏幕上会出现什么字符,这就是您引用的 jquery 文档说的原因:

For example, a lowercase "a" will be reported as 65 by keydown and keyup, but as 97 by keypress.

更糟糕的是,对于没有在屏幕上写入内容的内容,Safari 不会触发按键事件——这就是箭头键不起作用的原因。然而,Firefox 确实会触发箭头键的按键事件。两者都是规范的合理实现,所以不要期望任何一个都会改变。这就是为什么有人建议坚持使用 keydown 或 keyup。

但是,看起来您想利用按键事件在按住键时重复(在 Firefox 中)的方式,并且您希望使用箭头键来执行此操作。如果是这种情况,您需要编写一个同时查看 keydown 和 keypress 的处理程序。以下是浏览器对按住箭头键的两种不同反应方式:

*Firefox注册一个 keydown 事件并重复 keypress 事件(注意:只需按一次键将注册一个 keydown 和一个 keypress 事件)

*Safari注册一个 keydown 事件并重复 keydown 事件 一个快速破解,使箭头键工作得相当好,并让键重复工作是:

function moveItem(evt) {
    // do something with `this` and evt.keyCode here...
}

$(document.documentElement)
    .keypress(function(evt) {
        if ($.data(this, '_lastKeyEvent') != 'keydown') {
            // since firefox will do both a keydown and a keypress for the first
            // keydown, we ignore the very first keypress
            moveItem.call(this, evt);
        }
        $.data(this, '_lastKeyEvent', 'keypress');
    })
    .keydown(function(evt) {
        moveItem.call(this, evt);
        $.data(this, '_lastKeyEvent', 'keydown');
    });
于 2012-05-24T08:35:53.593 回答