2017-11-30 8 views
0

誰かがキーを押しているときに検出したいコードを持っています。その後、キーを押しているコードを削除します。私はオンラインで見つけた情報を使っていくつかのコードをまとめようとしました。 は、ここで私がこれまで持っているものです。Keydownとkeyupイベントリスナーが正常に動作しています

var down = {}; 
    document.addEventListener("keydown", function(evt) { 
     down[evt.keyCode] = true; 
     console.log(down) 
    }); 
    document.addEventListener("keyup", function(evt) { 
     delete down[evt.keyCode]; 
    }); 
var p = 0 
if (down(65) == 65 && p - 1 >= 0) { 
     p -= 1; 
    } 
    if (down(65) == 68 && p + 1 <= 9) { 
     p += 1; 
    } 

コンソールは、その下には関数ではありませんと言って続けています。どのキーコードを押さえているのか、またそのキーコードを持ち上げた後にそのキーコードのインスタンスを削除するにはどうすればいいですか?

+1

まあ 'down'は*ありません*関数です。それを '{}'に初期化しました。 'down(65)'はそれを関数として呼び出そうとしますが、それは動作しません。あなたは 'down [65]をしたい。 – Pointy

+0

それでは、私はそれをどのように読むのですか? – Bestlogo56

+0

'down(65)== 65 'を' down [65] 'に置き換えてください – gurvinder372

答えて

1

downの値に正しくアクセスしていません。

var down = {}; 
 

 
document.addEventListener("keydown", function(evt) { 
 
    down[evt.keyCode] = true; 
 
    console.log(down) 
 
}); 
 

 
document.addEventListener("keyup", function(evt) { 
 
    delete down[evt.keyCode]; 
 
}); 
 

 
var p = 0; 
 

 
if (down[65] === 65 && p - 1 >= 0) { 
 
    p -= 1; 
 
} 
 
if (down[65] == 68 && p + 1 <= 9) { 
 
    p += 1; 
 
}

+0

は最初の行が役に立たないのですか? –

+0

あなたは 'var down = {};'を参照していますか? –

+0

はい意味がありません –

1

それはdown['65']、ないdown(65)です:オブジェクトと、ブラケットまたはドット表記は、移動するための方法です。

down['65']は、比較の前に存在する場合にも、テストする必要があります:

if (down['65'] && down['65'] == 65 && p - 1 >= 0) { 
    p -= 1; 
} 
if (down['65'] && down['65'] == 68 && p + 1 <= 9) { 
    p += 1; 
} 
1

はちょうどそれが価値だ得るために、[65](65)のダウンダウンに変更。

down(65)「ダウンと呼ばれる配列のインデックス65の値にアクセスする機能

down[65]としてダウン呼び出す

+0

しかし、OPは配列ではなくオブジェクトとして 'down'を宣言しているので、インデックスはまったくありません。その代わりに、キーとキーは文字列なので、 '65 'ではなく' '65''でなければなりません。 –

関連する問題