3

我最近一直在做一些 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 来修复...奇怪。

4

3 回答 3

2

替换您的以下行:

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;

更新:
我上面的代码在 keypress 事件中使用时仍然不起作用,因为正确的解决方案是使用keydownkeyup事件来捕捉箭头键。请参阅此处以获取增强的答案https://stackoverflow.com/a/2218915/352672 另请参阅此处使用 keyup 事件的工作 jsfiddle 。

于 2013-02-03T16:22:56.397 回答
1

交换

if(e.keyCode !=13) return; 

和下一行。

于 2013-02-03T16:09:47.977 回答
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 提供了指示按下哪个键的代码,而 keypress 指示输入了哪个字符。例如,小写的“a”将被 keydown 和 keyup 报告为 65,但被 keypress 报告为 97。所有事件都将大写“A”报告为 65。由于这种区别,当捕获特殊按键(如箭头键)时,.keydown() 或 .keyup() 是更好的选择。

简而言之,keyPress箭头键不会触发事件。

于 2013-02-03T16:24:47.847 回答