繁体   English   中英

为什么第二次按时返回键码而不是键码的假值?

[英]Why do I get return false value of key code and not the key code when press second time?

为什么在按第二个键时会返回键值的假值,而不返回键值? 用我的代码

  1. 当我在文本框中按逗号( , )时,将发出警报44为什么不发出警报188
  2. 当我按第二个键时,为什么警报undefined值?

 <input onkeypress="return test_fn(value)" type="text"> <script> function test_fn(evt) { evt = evt || window.event; var charCode = evt.which || evt.keyCode; var charStr = String.fromCharCode(charCode); alert(charCode); } </script> 

当我在文本框中按逗号(,)时,将发出警报44为什么不发出警报188?

因为,是字符代码44。如果您想要一个码,则需要使用keydownkeyup ,而不是keypress 但是请注意,某些键码因操作系统而异,甚至区域键盘布局随区域键盘而异。

当我按第二个键时,为什么警报未定义的值?

因为您要将输入的value传递给函数,但是随后将参数用作函数的参数,就好像它是Event对象一样。 一次,因为value是空的,因此是虚假的,所以evt = evt || window.event evt = evt || window.event捕获全局event对象(在Firefox上不起作用),因此您可以使用事件对象。 但是第二","并不是虚假的,所以evt = evt || window.event evt = evt || window.event始终使用","whichkeyCode都未定义。 您的onkeypress应该是onkeypress="test_fn(event)"

 <input onkeypress="return test_fn(event)" type="text"> <script> function test_fn(evt) { evt = evt || window.event; var charCode = evt.which || evt.keyCode; var charStr = String.fromCharCode(charCode); alert(charCode); } </script> 

...或者更好的是,根本不使用onXYZ样式的处理程序,而使用现代的事件处理( addEventListener ,如果必须支持过时的浏览器,也许是attachEvent )。

您的代码似乎可以正常工作。 它返回每个字符的值。 查看ASCII表( http://www.asciitable.com/ ),逗号应返回44。

至于在键入第二个字符时未定义,它会尝试返回字符串(两个或所有字符)的值,而不仅仅是返回键入的最新字符。 您正在获取value ,而不仅仅是最近的角色。

您的问题是,当您调用onkeypress时,输入的值尚未设置,因此test_fn调用的参数值为null。 因此,在第一次运行fn_call时,

evt = evt || window.event

评估为evt = window.event。 下次调用fn_call时,值将设置为按下键时的输入值。 因此,上面的evt = ...行现在计算为evt = value。 value没有名为“ which”或“ keyCode”的属性,因此alert(charCode)显示未定义。

该代码对我有用:

<input onkeypress="test_fn()" type="text">

<script>
function test_fn() {
  var evt = window.event;
  var charCode = evt.which || evt.keyCode;
  var charStr = String.fromCharCode(charCode);
  console.log(charCode);
}
</script>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM