2012-05-24 94 views
1

我想一个.keyup(e)附着在向上和向下箭头。它在Firefox中正常工作,但在Safari中无法正常工作。所有其他箭头在Safari中都能正常工作。.keyup()向上和向下箭头在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

早该补充说,越早...

回答

1

AR你使用哪个版本的Safari

jquery support浏览器的兼容性

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的作品,但可能会有一些意外的错误,因为我们不为定期对其进行测试。

可以测试关键事件

try test here

or here

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

按键时是一个令人困惑的事件。虽然KeyDown和KEYUP会告诉你哪个特定键键盘上关闭或刚回来时,键击事件应该告诉你会出现什么字符在屏幕上,这就是为什么你引用的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。这里有两种不同的方式浏览器反应到方向键被按下:

*火狐注册一个keydown事件也重复按键事件 (注:只是击中一次键,将注册既有的keydown和按键事件)

* 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'); 
    }); 
+0

这是5.1.5版本。我已经读过其他人在关键出版物上遇到焦炭代码问题。我会将它报告为一个错误。谢谢 – Ryan

+0

左侧,右侧和空格键仍然适用于此代码,但向上和向下箭头在Safari中仍然不可用。 – Ryan

2

工作演示请尝试在这里我对OSX野生动物园,它的工作原理:http://jsfiddle.net/DRgRv/1/

所以点击灰色框,然后用上下箭头键导航:

D'恩别如果这有帮助,请忘记投票并接受。

代码

$(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; 
    } 
})​ 
+0

它适用于Safari中的jsfiddle,但添加到我的代码时会抛出图像。我将id和.animate()更改为.click() – Ryan

相关问题