Javascript 为什么在第二次按下时,返回的键代码值为false而不是键代码?
为什么我在按第二个键时得到键代码的返回值为false而没有得到键代码?用我的代码Javascript 为什么在第二次按下时,返回的键代码值为false而不是键代码?,javascript,Javascript,为什么我在按第二个键时得到键代码的返回值为false而没有得到键代码?用我的代码 当我在文本框中按逗号(,)时,它将发出警报44为什么不发出警报188 当我按下第二个键时,为什么警报未定义值 功能测试(evt){ evt=evt | | window.event; var charCode=evt.which | | evt.keyCode; var charStr=String.fromCharCode(charCode); 警报(字符码); } 当我在文本框中按逗号(,)时,它将发出警
,
)时,它将发出警报44
为什么不发出警报188
未定义值
功能测试(evt){
evt=evt | | window.event;
var charCode=evt.which | | evt.keyCode;
var charStr=String.fromCharCode(charCode);
警报(字符码);
}
当我在文本框中按逗号(,)时,它将发出警报44为什么不发出警报188
因为,
是字符代码44。如果需要按键代码,则需要使用keydown
或keydup
,而不是keypress
。但请注意,某些键代码因操作系统而异,甚至因区域键盘布局而异
当我按下第二个键时,为什么警报未定义的值
因为您正在将输入的值
传递到函数中,但随后将参数用于函数,就像它是事件
对象一样。第一次,由于value
是空的,因此是falsy,evt=evt | | window.event
获取全局event
对象(在Firefox上不起作用),因此使用事件对象。但是第二次,,“
不是错误的,因此evt=evt | | window.event
继续使用,“
以及和keyCode
未定义的。您的onkeypress
应该是onkeypress=“test\u fn(event)”
功能测试(evt){
evt=evt | | window.event;
var charCode=evt.which | | evt.keyCode;
var charStr=String.fromCharCode(charCode);
警报(字符码);
}
您的代码似乎工作正常。它返回每个字符的值。查看ASCII表()时,逗号应返回44
至于在键入第二个字符时未定义,它试图返回字符串(两个或所有字符)的值,而不仅仅是键入的最新字符。您正在获取值,而不仅仅是最近的字符。您的问题是,当您调用onkeypress时,输入值尚未设置,因此test\u fn调用的值参数为null。所以在第一次通过fn_通话时
evt = evt || window.event
计算结果为evt=window.event。
下次调用fn_call时,value将设置为按键时的输入值。所以evt=。。。上面的行现在计算为evt=值。值没有名为“which”或“keyCode”的属性,因此警报(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>
功能测试_fn(){
var evt=window.event;
var charCode=evt.which | | evt.keyCode;
var charStr=String.fromCharCode(charCode);
console.log(charCode);
}
44是ASCII中的逗号