2013-02-03 59 views
2

我一直在做一些JS最近和得到這個愚蠢的錯誤,我可以檢測到返回鍵使用e.keyCode和檢查keyCode == 13,但當我嘗試檢查38(向上箭頭)它永遠不會觸發。請幫忙嗎?Javascript向上箭頭按鍵沒有發射

HTML:

<input type="text" id="TxtMessage" 
     placeholder="Message" onKeyPress="SendMsg(event)" > 

的Javascript:

function SendMsg(e) 
{ 
var message = document.getElementById("TxtMessage"); 

if(e.keyCode ==13) 
{ 
    var json = {"message": message.value}; 
    json = JSON.stringify(json); 
    ws.send(json); 
    PreviousMessage = message.value; 
    message.value = ""; 
    message.focus(); 
} 
else if(e.keyCode == 38) 
{ 
    message.value = PreviousMessage; 
} 
} 

編輯:通過改變onkeypress事件來的onkeydown ......奇怪的修正。

+0

你想在這裏做什麼?按ENTER和UP時會發生什麼? – ATOzTOA

+0

按下時,它將元素的文本設置爲先前發送的消息。但向上箭頭按鍵事件沒有被解僱。我試着把警報放在那裏,但它仍然不起作用 – user1763295

回答

1

交換

if(e.keyCode !=13) return; 

和下一行。

+0

已經嘗試過,沒有工作:/ – user1763295

+0

你確定?也許問題在別的地方?通過「沒有工作」你的意思是'message.value'設置不正確? – abc667

+0

是的,我一直在使用警報,並仔細檢查它是否正在發射。警報從不顯示。 – user1763295

1

替換您如下幾行:

if(e.keyCode !=13) return; 
if(e.keyCode == 38) { message.value = PreviousMessage; return; } 

這一個:

var charCode = typeof e.which == "number" ? e.which : e.keyCode; 

if(charCode == 38) { message.value = PreviousMessage; return; } 
if(charCode !=13) return; 

UPDATE:
我上面的代碼還沒有在按鍵事件時工作,爲正確的解決方案是使用keydownkeyup事件來捕捉箭頭鍵。請參閱此處以獲得增強型答案https://stackoverflow.com/a/2218915/352672另請參閱此處使用keyup事件的working jsfiddle

1

這一點:

function SendMsg(e) 
{ 
    var message = document.getElementById("TxtMessage"); 

    // Load previous message 
    if(e.keyCode == 38) { message.value = PreviousMessage; return; } 


    // Send message on ENTER 
    if(e.keyCode == 13) { 
     if(message.value !=null && message.value !="") 
     { 
      var json = {"message": message.value}; 
      json = JSON.stringify(json); 
      ws.send(json); 
      PreviousMessage = message.value; 
      message.value = ""; 
      message.focus(); 
     } 
     else 
     { 
      CAlert("Message cannot be empty.", false, true);  
     } 
    } 
} 

更新爲什麼的keyDown作品和按鍵不?

請注意,keydown和keyup提供了一個代碼,指示哪個鍵被按下,而按鍵指示輸入了哪個字符。例如,對於 示例,小寫的「a」將由keydown和keyup報告爲65, 但按鍵值爲97。大寫「A」在所有 事件中報告爲65。由於這種區別,當捕獲諸如箭頭鍵的特殊擊鍵 時,.keydown()或.keyup()是更好的選擇。

總之,keyPress事件不會觸發箭頭鍵。

+0

我需要檢查這一點,它確保只有在按下輸入按鈕時纔會發送消息,而不是其他按鍵。我嘗試徹底刪除13的檢查,只是有e。keyCode == 38,並且我在{{但它仍然沒有觸發...}中放入一個警報... – user1763295

+0

剛剛更新了原始帖子中的Javascript到我的新的仍然不起作用並修復你想說的話是一個問題。 – user1763295

相關問題