2011-01-24 6 views
0

JSゲームを少し作っていて、ユーザーの入力をできるだけ早くチェックしようとしているので、onKeyDown関数を使用しています。問題は、答えが5の場合は、5を押してからもう一度5を押すと、ユーザーの入力を認識することができます。なぜこれが起こっていますか?文字が実際にテキストボックスに追加されキーを2回押しなければならないのはなぜですか?

var btn=0 
var num="" 
var digits=1 
function quickanswer(){ 
    if (document.getElementById("autocheck").checked==true&&document.getElementById("txt").value.length==digits){ 
     document.getElementById("dots").innerHTML = "" 
     createdots() 
     document.getElementById("txt").value="" 
     document.getElementById("txt").focus() 
     document.getElementById("txt").style.color = "#000000" 
    } 
} 
function submitenter(){ 
    var keycode = window.event.keyCode; 
    if (keycode == 13) 
     { 
     btnclick(); 
     } 
    if (keycode < 47 || keycode > 58){ 
     return false;} 
    } 

<input id="txt" type="text" onKeyPress="return submitenter()" onKeyDown="quickanswer()"/> 

答えて

4

onKeyDownイベントが発生します。

新しい文字をキャプチャするには、代わりにonkeyupイベントを使用します。

onKeyPress="return submitenter(event)" 

次に、関数に:

とにかく、あなたのコードは、現在のクロスブラウザではない..ですwindow.eventではなく、このような関数の引数としてイベントを渡し、標準ではありません

function submitenter(evt){ 
    //IE fix 
    if (typeof evt == "undefined") 
     evt = window.event; 
    var keycode = evt.keyCode || evt.which; 
    ... 
+0

されていますどのキーがonKeyDownで押されたかを取得する方法はありますか? – Sean

+0

@Seanはい、 'submitenter'で既に得たようです:' var keycode = evt.keyCode || evt.which;ここで "evt"は、私がそれをクロスブラウザーにするために上記で説明したようなものです。 –

関連する問題