2012-05-24 115 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

相關問題