2013-06-20 60 views
1

下面的代碼可以有效地防止瀏覽器在Chrome和Safari中觸發。但是,出於某種原因,即使按下Firefox中的箭頭鍵,我的代碼也不會觸發。event.preventDefault在keydown的Firefox中怪異地行爲

$(window).keydown(function(e) { 
    switch(e.which){ 
     case 39: //right arrow key 
      e.preventDefault(); 
      $('body').scrollLeft(scrollNow + z(10)); 
      break; 
     case 37: // left arrow key 
      e.preventDefault(); 
      $('body').scrollLeft(scrollNow - z(10)); 
      break; 
    } 
}); 

我試過return false;,而不是e.preventDefault();過,但沒有效果。我也嘗試在scrollLeft行後放e.preventDefault();,但它也不起作用。有任何想法嗎?

回答

2

試試這個 -

code = e.keyCode || e.which; 
switch(code){ 
+0

謝謝。它不工作雖然:( – AKG

+1

@AKG charCode!== keyCode,另見http://stackoverflow.com/questions/1444477/keycode-and-charcode – metadings

+0

@metadings感謝您的鏈接。我不知道。我認爲'keydown'的選擇是正確的嗎? – AKG

2

試試這個:

$(window).keydown(function(e) { 
    switch(e.keyCode){ 
     case 39: //right arrow key 
      e.preventDefault(); 
      $('body').scrollLeft(scrollNow + z(10)); 
      break; 
     case 37: // left arrow key 
      e.preventDefault(); 
      $('body').scrollLeft(scrollNow - z(10)); 
      break; 
    } 
}); 
0

試試這個,

更新

$(window).keydown(function(e) { 
    var code = (e.keyCode ? e.keyCode : e.which); 
    switch(code){ 
     case 39: //right arrow key 
      e.preventDefault(); 
      $('body').scrollLeft(scrollNow + z(10)); 
      break; 
     case 37: // left arrow key 
      e.preventDefault(); 
      $('body').scrollLeft(scrollNow - z(10)); 
      break; 
    } 
}); 
+0

謝謝。不錯,儘管如此,但這會阻止任何其他鍵被識別。但它不起作用。真的很奇怪,我沒有其他代碼衝突'keydown'事件 – AKG

+0

更新後的代碼也不起作用。 – AKG

1

我剛來在這個問題上,我自己。我爲選擇輸入的keydown事件添加了一個事件監聽器,以禁止左/右鍵分別遍歷頂部/右側的選項。它適用於Chrome和IE。根據我所閱讀的內容,到目前爲止,它肯定是一個bug,對於是否真的把它當作一個bug進行了大量的辯論和猜測。我甚至還將另一個事件監聽器附加到前面提到的用於加密的選擇輸入;我注意到它也是在keydown事件(Firefox)中調用preventDefault之後觸發的。但是,這一行爲並未受到阻止。很煩人。

仍在嘗試確定解決方法。