1
<input type="text"></input>

<script>
var a = document.getElementsByTagName('input')[0];
a.onkeypress = function(evt) {
  this.evt = evt || event;
var b = String.fromCharCode(evt.keyCode);
 while(forEach(evt) {
     alert("You pressed " + b);
   }
};
</script>

これは機能していないようです。ユーザーがキーを押すと、常にキーに警告する必要があります。ここでのブラウザは Chrome です。

4

2 に答える 2

2

while ループは必要ありません。クロスブラウザに準拠した方法でキーを取得し、対応する char を見つけて警告するだけです。

var a = document.getElementsByTagName('input')[0];
a.onkeypress = function(event) {
  //e.which & e.keyCode are for cross browser compliance
  alert(String.fromCharCode(event.keyCode || event.which)); 
};

作業例 http://jsfiddle.net/VZEQe/

于 2013-05-30T09:00:33.947 に答える
2

ここでは、定義していない関数 ( forEach)を呼び出しているため、機能していません。

while(forEach(evt) {
//    ^

JavaScript コンソールを見ると、それに関連するエラーが表示されます。

evtまた、次のプロパティに割り当てたくありませんthis

this.evt = evt || event; // <== Don't do this

引数を使用するだけです:

evt = evt || event;

また、すべてのキー押下を個別に警告する場合、ループの理由はありません。

また、input要素には終了タグがありません。次のようにする必要があります。

<input type="text">

または (XHTML、およびオプションで HTML):

<input type="text"/>

ではない:

<input type="text"></input>

which最後に、キーコードに使用するブラウザもあれば、 keyCode. ||ブラウザが提供するものは何でも使用できます。

String.fromCharCode(evt.which || evt.keyCode)

最小限の更新は次のとおりですライブソース

<input type="text">
<script>
var a = document.getElementsByTagName('input')[0];
a.onkeypress = function(evt) {
  evt = evt || event;
  alert("You pressed " + String.fromCharCode(evt.which || evt.keyCode));
};
</script>
于 2013-05-30T08:58:19.427 に答える