7

キーダウン用とキーアップ用の2つのイベントハンドラーがあります。キーダウンイベントハンドラーはアラートメッセージをトリガーしますが、これによりキーアップイベントが発生しなくなります。

非常に簡単な例をここで見ることができます:http: //jsfiddle.net/boblauer/jaGwT/ キーダウンがアラートを開くとき、キーアップは起動されませんが、アラートが開かれないとき、キーアップは起動されます。jsfiddleのコードは次のとおりです。

var i = 0;
window.addEventListener('keydown', function(e) {
    if (i++ % 2) alert('down');
    console.log('down');
});

window.addEventListener('keyup', function(e) {
    alert('up');
    console.log('up');
});

複数のキーの組み合わせ(「d + f」など)のリッスンをサポートするライブラリがあるので、キーが押されたときに、現在押されているキーのリストに追加する必要があります。キーが離されたときに、上記のリストから削除する必要があります。私が実行している問題は、d + fが同時に押されたときにアラートを表示したい場合、キーアップハンドラーが呼び出されないため、「現在押されている」リストからこれらのキーを削除するコードが実行されないことです。 。

この問題に対する良い回避策は考えられません。何か案は?

4

1 に答える 1

4

アラートは、イベントの発生を防ぎます。代わりにできることは、とにかく発生するため、この関数を手動でトリガーすることです。

var keyupfunction = function(e){
    alert('up');
    console.log('up');
}

window.addEventListener('keyup', keyupfunction);

window.addEventListener('keydown', function(e) {
    if (i++ % 2) alert('down');
    console.log('down');
    keyupfunction(e);
});

しかし、実際には、アラートを使用するべきではありません。これらのイベントを防ぎますが、他に何が壊れる可能性があるかは誰にもわかりません。代わりにカスタムのものを使用してください。

于 2012-11-27T21:23:13.400 に答える