为什么我按下第二个键时会返回键码返回false值而不能获取键码?用我的代码
,
)时,它会提醒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>
答案 0 :(得分:5)
当我在文本框中按逗号(,)时,它会提醒44为什么不提醒188?
因为,
是字符代码44.如果您需要密钥代码,则需要使用keydown
或keyup
,而不是{ {1}}。但请注意,一些关键代码从操作系统到操作系统,甚至是区域键盘布局到区域键盘布局都有所不同。
当我按下第二个键时,为什么警告未定义的值?
因为你将输入的keypress
传递给函数,但是然后使用函数的参数就好像它是一个value
对象一样。 第一个时间,因为Event
为空,因此有效,value
抓取全局evt = evt || window.event
对象(它不会在Firefox上工作)等等你使用事件对象。但第二时间,event
并非虚假,因此","
继续使用evt = evt || window.event
以及","
和which
未定义。您的keyCode
应为onkeypress
。
onkeypress="test_fn(event)"
&#13;
...或者更好的是,根本不使用<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
支持过时的浏览器。)
答案 1 :(得分:1)
您的代码似乎运行正常。它返回每个字符的值。查看ASCII表(http://www.asciitable.com/),逗号应返回44。
至于在键入第二个字符时未定义,它会尝试返回字符串的值(两个或所有字符),而不仅仅是键入的最新字符。你抓住的是value
,而不仅仅是最近的角色。
答案 2 :(得分:1)
您的问题是,当您调用onkeypress时,尚未设置输入的值,因此test_fn调用的值参数为null。所以在第一次通过fn_call时,
evt = evt || window.event
评估为evt = window.event。 下次调用fn_call时,value设置为按下键时的输入值。所以上面的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>