Javascript 为什么在第二次按下时,返回的键代码值为false而不是键代码?

Javascript 为什么在第二次按下时,返回的键代码值为false而不是键代码?,javascript,Javascript,为什么我在按第二个键时得到键代码的返回值为false而没有得到键代码?用我的代码 当我在文本框中按逗号(,)时,它将发出警报44为什么不发出警报188 当我按下第二个键时,为什么警报未定义值 功能测试(evt){ evt=evt | | window.event; var charCode=evt.which | | evt.keyCode; var charStr=String.fromCharCode(charCode); 警报(字符码); } 当我在文本框中按逗号(,)时,它将发出警

为什么我在按第二个键时得到键代码的返回值为false而没有得到键代码?用我的代码

  • 当我在文本框中按逗号(
    )时,它将发出警报
    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中的逗号