2011-10-05 131 views
4

我们正在HTML/CSS/JS中创建幻灯片,但由于某些原因它不适用于Firefox。它工作在WebKit浏览器没有问题..箭头键在Firefox中不起作用

的代码是这样的:

keyPress : function() { 
     $(document.body).keydown(function(e) { 
     if (e.keyCode === 37 || e.keyCode === 39 || e.which == 37 || e.which === 39) { 
      e.preventDefault(); 
      (e.keyCode === 39 || e.which === 39) ? Slides.next() : Slides.prev(); 
     } 
     }); 
    }, 

如果我使用的只是$(document)代替(document.body)它改变我的颜色,但幻灯片不会改变..

由于某些原因,Firefox(7.0.1,OSX Lion)没有拿起按键。它可以在Safari/Chrome中正常工作。

我们正在测试这个网站是:#took链接了

+0

我可否建议你提供一种方法,通过幻灯片点击,以及如箭头键通过他们? – Blazemonger

+0

是的,它在todo清单上;但我希望它能在Firefox中工作:( – cabaret

+0

使用Firebug检查'e'对象以找出它支持的方法和属性。 – Spudley

回答

7

更新:我觉得你的问题就出在使用“document.body的”选择的。这适用于Chrome,但不适用于Firefox(http://jsfiddle.net/Jncrh/2/)请尝试选择“文档”,然后查看它是否有效。 (http://jsfiddle.net/Jncrh/5/

$(document).bind('keydown',function(e){ 
    if (e.which==37 || e.which==39) { 
     e.preventDefault(); 
     if (e.which==37) { 
      alert("going back"); 
     } else { 
      alert("going forward"); 
     } 
    } 
}); 

火狐可以拿起上述样品中的按键,所以我怀疑问题出在你的代码的其他地方。

上一个:快速谷歌搜索显示Firefox使用event.charCode而不是event.keyCode。试试这个:

key = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode; 
if (key===37 || key===39) {... 

然而,jQuery的应该能够拿起所有那些与自己event.which,所以我不明白为什么不工作的,是给你的。

+0

相关文章:http://www.quirksmode.org/js/keys.html – Lekensteyn

+0

虽然..似乎并没有为我工作..:\ if(e.keyCode === 37 || e.keyCode === 39 || e.charCode === 37 || e.charCode === 39 ){ – cabaret

+0

我真的不明白为什么它不起作用。就像你说的,我想到了'哪个'会把它拿起来,但是可惜的是,它在Firefox中对你有用吗? – cabaret

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

    function keyType(e){ 
    if (e.keyCode==37 || e.keyCode==39) { 
     e.preventDefault();   
     if (e.which==37) {    
      //handle left 
     } 
     else { 
      //handle right  
     }  
    } 
} 
1

在​​和keyup事件,所有主要的浏览器都支持的相应事件的keyCode属性,所以没有必要为which财产。此外,要捕获整个文档的关键事件,您需要将侦听器附加到文档而不是正文。

这里是JavaScript的关键事件的最终页:http://unixpapa.com/js/key.html

,这里是你的代码的修订版本:

$(document).keydown(function(e) { 
    var leftArrow = (e.keyCode == 37), rightArrow = (e.keyCode == 39); 
    if (leftArrow || rightArrow) { 
     e.preventDefault(); 
     rightArrow ? Slides.next() : Slides.prev(); 
    } 
});