0

在第一种方法中,使用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属性值必须是事件处理程序的文档。

回答

1

当用户按下键盘上的某个键时,会发生onkeypress事件。在那个时间点,用户输入的关键值是而不是尚未放入文本框。所以当你第一次输入密钥时,document.getElementId('charInput').value返回当前的值为空的文本框。下次按一个键时,它会显示在文本框中输入的第一个值。请注意,document.getElementId('charInput').value显示文本框的当前值,而不是按下的关键字符。此外,应该有功能f()后bracked一个开口,所以它应该是:

function f() { 
    document.getElementById('KeyData').innerHTML = document.getElementById('charInput').value + 'is the content of charInput'; 
    return true; 
} 
+0

OK,什么是复杂的是,当你第二次按键时,它会显示第二个方法中的第一个值?这与第一种方法如何工作? – overexchange

+0

'document.getElementById('charInput').value'不显示被按下的值,它显示文本框的当前值。因此,当文本框中有一个字符并再次按下某个键时,它会显示一个字符。 – dutchdukes

+0

是的,我明白,当文本框中有一个字符,然后再次按下一个键时,就会显示出一个字符。是什么让'document.getElementById('charInput')。值“在按下第二个字符后立即显示第一个字符?这是我的问题 – overexchange

0

你缺少的function f

function f(){ 
// your code 
} 
+0

''{是类型,而发布查询,这里的问题是[代码](http://jsfiddle.net/7cr2nyqo/8 /) – overexchange

0

左括号中的代码是好的。函数f()缺少圆括号'{'。另外请确保您有这个代码包围<script>标签。也可以使用onkeyup而不是onkeypress。

+0

http://jsfiddle.net/7cr2nyqo/8/ – overexchange

+0

使用onkeyup而不是onkeypress。这个事件发生在'取消'按键之后,它确保了该值被添加到了输入字段中。在第一种情况下,您从事件对象本身获得了密钥。但是,在输入字段中输入值之前发生的所有事件都会发生,所以这就是值为空的原因。要查看其中的差异,请查看此链接[link](http://www.bloggingdeveloper.com/post/KeyPress-KeyDown-KeyUp-The-Difference-Between-Javascript-Key-Events.aspx) –

相关问题