2016-10-31 9 views
0

なぜ私はキーコードのfalse値を返し、2番目のキーを押すとキーコードを取得しないのですか?テキストボックスに私のコード2回目にキーコードをキーコードではなくfalseに戻すのはなぜですか?

  1. 私は押しカンマ(,)で、それは44はなぜ188を警告警告するのですか?
  2. 2番目のキーを押すと、なぜ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>

+1

44は、ASCIIでカンマです – Li357

答えて

5

私はテキストボックスにカンマ(、)を押したときには、188を警告ではないのはなぜ44に警告するのか?

,あなたはキーコードを望んでいた場合、あなたはkeypress、​​またはkeyupを使用する必要がないと思い、文字コード44ですので。ただし、キーコードの中には、オペレーティングシステムによって異なるものや、地域のキーボードレイアウトから地域のキーボードレイアウトに異なるものがあります。

私が2番目のキーを押すと、なぜ未定義の値が警告されますか?

あなたが入力のvalue関数に渡し、それがEventオブジェクトであるかのように、関数の引数を使用しているので。 最初の時間です。valueは空白なので、evt = evt || window.eventはグローバルeventオブジェクト(これはFirefoxでは動作しません)を取得し、イベントオブジェクトを使用します。しかし、の第2のの時間、","は偽ではないので、は","を使用し続け、whichkeyCodeは未定義です。 onkeypressonkeypress="test_fn(event)"である必要があります。 (あなたは時代遅れのブラウザをサポートする必要がある場合addEventListener、おそらくattachEvent

<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 -attributeスタイルのハンドラを使用していない、取り扱い現代のイベントを使用。

1

コードが正常に動作しているようです。各文字の値を返します。 ASCIIテーブル(http://www.asciitable.com/)を見ると、コンマは44を返します。

2番目の文字を入力すると未定義のため、入力された最新の文字だけでなく文字列(両方またはすべての文字)の値を返そうとしています。あなたは最新の文字だけでなく、valueをつかんでいます。

1

あなたの問題は、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> 
関連する問題