[英]Why do I get return false value of key code and not the key code when press second time?
为什么在按第二个键时会返回键值的假值,而不返回键值? 用我的代码
,
)时,将发出警报44
为什么不发出警报188
? 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。如果您想要一个键码,则需要使用keydown
或keyup
,而不是keypress
。 但是请注意,某些键码因操作系统而异,甚至区域键盘布局随区域键盘而异。
当我按第二个键时,为什么警报未定义的值?
因为您要将输入的value
传递给函数,但是随后将参数用作函数的参数,就好像它是Event
对象一样。 第一次,因为value
是空的,因此是虚假的,所以evt = evt || window.event
evt = evt || window.event
捕获全局event
对象(在Firefox上不起作用),因此您可以使用事件对象。 但是第二次","
并不是虚假的,所以evt = evt || window.event
evt = evt || window.event
始终使用","
, which
和keyCode
都未定义。 您的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.