Javascript向上箭头按键不开火

时间:2013-02-03 16:07:19

标签: javascript keypress

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

3 个答案:

答案 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事件不会触发箭头键。