当我在js中使用event.which时出现奇怪的行为

时间:2013-06-25 07:08:58

标签: javascript

<html>
<body onkeypress = "show_key(event.which)">
<form method="post" name="my_form">
The key you pressed was:
<input type="text" name="key_display" size="2"/>
</form>
<script type="text/javascript">
function show_key ( the_key )
{console.log(the_key);
       document.my_form.key_display.value = String.fromCharCode ( the_key );
}
</script>
</body>
</html>

以上代码来自:http://www.elated.com/articles/events-and-event-handlers/

问题:

1.在前端,如果我输入:a,它会显示:aa,为什么它显示双字母,我只输入一个?

2. show_key(event.which),这里的事件意味着'按键',我可以更改事件的名称吗?我试图将事件更改为e,然后在前端,我输入:a,它显示:a,但在控制台中,它还显示:ReferenceError: e is not defined

1 个答案:

答案 0 :(得分:1)

要检索事件,您必须像这样调用处理程序

<body onkeypress = "show_key(event)">

然后在函数

function show_key ( e )
{
       var the_key = e.which;
        console.log(e.which);
       document.my_form.key_display.value = String.fromCharCode ( the_key );
}

关于双重输入,它不是双重输入,首先你将key_Display值设置为你计算的字符串,然后,当事件已经过去时认为你的处理程序它将符号添加到当前聚焦的输入字段。关于活动仙境的更多信息:http://www.w3.org/TR/DOM-Level-3-Events/#dom-event-architecture

如果您只想始终关注相同的输入字段,这是一种更简单的方法:

<body onload="focusMyInput">  
    <form method="post" name="my_form">
        <input type="text" id="my_input" onblur="focusMyInput" name="key_display" size="2"/>
...

var focusMyInput = function(){
   document.getElementById('my_input').focus();
}

此代码将在加载输入时执行此操作#my_input将被聚焦,如果它变得模糊(失去焦点),它将运行相同的例程来恢复它。