我最近做了一些JS并且遇到了这个愚蠢的错误,我可以使用e.keyCode
检测返回键并检查keyCode == 13
但是当我尝试检查38
时(向上箭头)它永远不会发射。有什么帮助吗?
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 :(得分:1)
交换
if(e.keyCode !=13) return;
和下一行。
答案 1 :(得分: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;
<强>更新强>
我在上面的代码在按键事件中使用时仍无效,因为正确的解决方案是使用 keydown 或 keyup 事件来捕获箭头键。请点击此处查看增强型答案https://stackoverflow.com/a/2218915/352672此处还可以使用keyup事件查看working jsfiddle。
答案 2 :(得分: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有效且keyPress没有?
请注意,keydown和keyup提供了一个指示哪个键的代码 按下,而按键表示输入了哪个字符。对于 例如,keydown和keyup将小写的“a”报告为65, 但按键按97。所有人都报告大写“A”为65 事件。由于这种区别,在捕捉特殊击键时 例如箭头键,.keydown()或.keyup()是更好的选择。
简而言之,keyPress
事件不会触发箭头键。