在第一种方法中,使用KeyBoardEvent
例如,事件处理程序f
下面COULD检索键盘按键后字符,如下所示:为什么值输入对象的属性不具有价值?
<form action="#" id="sampForm" >
<input id='charInput' type='text'>
<p id="KeyData">Key press data here</p>
</form><br>
document.getElementById('charInput').onkeypress = f;
function f(event) {
var char = getChar(event || window.event)
if (!char) return false; // Special Key Pressed
document.getElementById('keyData').innerHTML = char + " was pressed";
return true;
}
function getChar(event) {
// event.which returns the key pressed
if (event.which == null) {
// Return the char if not a special character
return String.fromCharCode(event.keyCode); // IE
} else if (event.which!=0 && event.charCode!=0) {
return String.fromCharCode(event.which); // Other Browsers
} else {
return null; // Special Key Pressed
}
}
在第二种方法中,使用HTMLInputElement
实例的value
属性,低于回拨功能f
可不可检索按键后的字符,
<form action="#" id="sampForm" >
<input id='charInput' type='text'>
<p id="KeyData">Key press data here</p>
</form><br>
document.getElementById('charInput').onkeypress = f;
function f(){
document.getElementById('KeyData').innerHTML = document.getElementById('charInput').value + 'is pressed';
return true;
}
在第二个方法,为什么document.getElementById('charInput').value
是空字符串,当我按下第一键盘字符?事件处理方法如何解决这个问题?
注意:w3.org/TR/DOM-Level-2-Events/events.html - 实现Event接口的对象通常作为第一个参数传递给事件处理函数。在上面的代码中,我已经在第二种方法中分配了回叫而不是事件处理程序。因为没有说明onkeypress
属性值必须是事件处理程序的文档。
OK,什么是复杂的是,当你第二次按键时,它会显示第二个方法中的第一个值?这与第一种方法如何工作? – overexchange
'document.getElementById('charInput').value'不显示被按下的值,它显示文本框的当前值。因此,当文本框中有一个字符并再次按下某个键时,它会显示一个字符。 – dutchdukes
是的,我明白,当文本框中有一个字符,然后再次按下一个键时,就会显示出一个字符。是什么让'document.getElementById('charInput')。值“在按下第二个字符后立即显示第一个字符?这是我的问题 – overexchange