为什么我得到返回假值的关键代码,而不是关键代码时,按第二次
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
捕获全局event
对象(在Firefox上不起作用),因此使用事件对象。但是秒时间,","
不是假的,所以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调用的值参数为空。第一次运行fn_call时,
evt = evt || window.event
求值为evt = window.event。下次调用fn_call时,value被设置为按下键时的输入值。那么evt =。上面这行现在求值为evt = value。value没有名为"which"或"keyCode"的属性,所以alert(charCode)显示undefined。
这段代码为我工作:
<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>
- Javascript Select OnChange没有'不要第二次工作
- 相同的RegExp返回不同的结果-第一次是正确的结果,第二次是null
- 单击仅在第二次单击后有效
- 推特引导:弹出窗口不会在第一次点击时出现,但会在第二次点击时显示
- 第二次点击具有不同功能的按钮并更改文本
- 更改第二次推送时不起作用的元素高度
- 在第二次选择中选择2更改属性
- on(“点击”)仅在第二次点击后触发
- 在HTML中,如果第二次加载相同的脚本文件,它还会被加载吗
- Sails.js/Waterline.add()和.remove()仅适用于第二次调用
- 第二次单击时执行不同的代码(JavaScript)
- 此代码在第一次迭代时给出 0 作为高度和宽度,第二次给出正确的尺寸
- jQuery代码仅在第二次点击后有效
- 我的代码有什么问题?(第二次点击功能不起作用)
- 为什么我得到返回假值的关键代码,而不是关键代码时,按第二次
- Javascript代码第二次不工作
- javascript代码有问题.灯箱没有第二次打开
- jQuery: .toggle代码在第二次点击时不工作
- 我可以在第二次触发事件时执行一组不同的代码吗
- 在多选框中选择的值被记住的第二次弹出加载,即使我没有写代码来记住