0

(特定のタイプの) イベントが発生したかどうかを確認するにはどうすればよいですか? 次のコードを使用する必要があるとします。

<html>

    <head>
        <title>Events</title>
        <script type="text/javascript">
            document.addEventListener('keydown',

            function (event) {
                if (event.keyCode == 13) { //ENTER key was pressed
                    alert("Hahaha!");

                }

            }, false);

            document.addEventListener('click',

            function () {
                alert("Ahahahah!");


            }, false)
        </script>
    </head>

    <body></body>

</html>

「クリック イベントの後に ENTER を押しました!」という文字列の警告ボックスが必要だとします。ENTER が押されたとき、およびクリック イベントが発生した後に表示されます。

4

2 に答える 2

2

発生順序を記録する必要があります。JavaScript はデフォルトでは、あなたが説明している方法でイベント チェーンを記憶しません。単純に、任意の順序でイベント チェーンをトリガーできるため、言語の役に立たない機能になるからです。

基本的に、クリック イベントが発生したときに、それが発生したことを記録する必要があります。基本的な実装は、ブール フラグを使用することです。

var clickFired = false;// by default it is false.
document.addEventListener('click', function(event) {
    clickFired = true;
}, false);
document.addEventListener('keydown', function(event) {
    if (clickFired) {
        alert('key pressed after click');
    } else {
        alert('key pressed before click');
    };
};

JavaScript は、イベントについていくつかの非常に具体的なことしか覚えていません。ctrlKeyイベントがトリガーされたときに、altKeyshiftKeyまたはが押されたかどうかを認識metaKeyし、バブル ルール、トリガー実行フェーズ、ターゲット、および次のように入力することで確認できるいくつかのことを記憶します。

var clickFired = false;// by default it is false.
    document.addEventListener('click', function(event) {
        console.dir(event);//Firebug command.
        clickFired = true;
    }, false);

また、クロスブラウザ互換のイベント管理は、残念ながら達成するのが簡単ではないことに注意してください。ブラウザによって、イベントの処理方法が大きく異なります。基本的な例は、Internet Explorer が.~attachEvent()ではなくを使用することです。addEventListener()

実稼働環境用のコードを作成している場合は、なんらかの形式のライブラリを使用して作業を大幅に簡素化することをお勧めします。それ以外の場合は、車輪を再発明する必要があります。これは学習目的には最適ですが、退屈で時間がかかることに気付くかもしれません. JavaScript の使い方をよく知らない限り、生のコードを書くことは、他の人にすぐに使ってもらいたいものには適していません。

于 2012-12-15T22:52:42.053 に答える
0

コールバック関数を使用するのがおそらく最も簡単でしょう。詳細については、こちらの例をご覧ください。

function mySandwich(param1, param2, callback) {  
    alert('Started eating my sandwich.\n\nIt has: ' + param1 + ', ' + param2);  
    callback();  
}  

mySandwich('ham', 'cheese', function() {  
    alert('Finished eating my sandwich.');  
});  
于 2012-12-15T22:51:57.933 に答える