按键事件中的元素和JavaScript中的按键代码

3
我正在使用这段代码片段将KeyDown事件处理程序添加到HTML表单中的任何元素。
for(var i=0;i<ele.length;i++)
{
    ele[i].onkeydown = function()
    {
            alert('onkeydown');
    } 
}

我该如何在按键按下事件中知道哪个键被按下?我尝试了以下代码:
for(var i=0;i<ele.length;i++)
{
    ele[i].onkeydown = function(e)
    {
           alert(e.KeyCode);
    } 
}

但它没起作用,为什么呢? 非常感谢。

你想做什么?你是想检测可打印字符还是其他按键?如果是前者,你应该处理 keypress 事件;如果是后者,则应该处理 keydown 事件。 - Tim Down
我想将“回车”键更改为“制表符”。 - Arsen Mkrtchyan
应该是keyCode而不是KeyCode。 document.onkeydown = function(e){alert(String(e.keyCode));} 这个对我起作用了。 - partizanos
4个回答

6

这是我在解决这个问题时使用的代码。它在所有浏览器中都可以正常工作。

//handle "keypress" for all "real characters"     
if (event.type == "keydown") {
    //some browsers support evt.charCode, some only evt.keyCode
   if (event.charCode) {
      var charCode = event.charCode;
   }
   else {
      var charCode = event.keyCode;
   }
}

谢谢,它的效果很好,我能把这个代码改成制表符吗?event.charCode = 9 或 event.keyCode = 9 并不起作用 :( - Arsen Mkrtchyan
您可以通过在不同浏览器中按键时打印字符代码来尝试它,以查看要使用的确切代码。根据我的经验,在IE和Mozilla中,某些键具有不同的代码。 - Bobby
真的吗?这在非IE浏览器中能工作吗?event是从哪里来的? - Tim Down
我只在IE上测试过,你有非IE浏览器的建议吗,@Tim? - Arsen Mkrtchyan

3
我使用了这个:

function check(){
 if (event.keyCode == 32){
  alert("Space is pressed");
 }
}

and in my body tag: onKeyPress="check()"


3

要检测Enter键,您可以使用以下代码,在所有主流浏览器中都可以使用。它使用keypress事件而不是keydown事件,因为Enter键会产生可打印字符:

ele[i].onkeypress = function(evt) {
    evt = evt || window.event;
    var charCode = evt.keyCode || evt.which;
    if (charCode == 13) {
        alert("Enter");
        // Do stuff here
    }
};

0

应该是keyCode,而不是KeyCode


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接