ホームページ > ウェブフロントエンド > jsチュートリアル > イベント リスナーが関数をすぐにトリガーするのはなぜですか?

イベント リスナーが関数をすぐにトリガーするのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-22 14:19:10
オリジナル
446 人が閲覧しました

Why Are My Event Listeners Triggering Functions Immediately?

イベント リスナー: プロンプトなしの関数呼び出しの謎

イベント リスナーを使用する場合、不可解な動作に遭遇することがあります。外部関数参照を使用してイベント リスナーを追加すると、要素をクリックしなくても、関数をすぐに呼び出すことができます。これはイライラさせられ、予期しない動作につながる可能性があります。

次の HTML スニペットを考えてみましょう:

<span>
ログイン後にコピー

クリック イベントを追加するには、addEventListener メソッドを使用します:

first.addEventListener('click', function() {
  alert('sup!');
})
ログイン後にコピー

このコードは期待どおりに機能し、「最初のリンク」がクリックされたときにアラートをトリガーします。ただし、外部関数を 2 番目の引数として使用する場合:

function message_me(m_text) {
    alert(m_text)
}

second.addEventListener('click', message_me('shazam'))
ログイン後にコピー

message_me 関数がすぐに呼び出され、「2 番目のリンク」がクリックされる前でも警告メッセージが表示されます。

Toこの問題を解決するには、addEventListener の 2 番目のパラメーターが関数参照を期待していることを理解する必要があります。問題のあるコードでは、関数が直接呼び出され、その結果が addEventListener に渡されます。代わりに、匿名関数を 2 番目の引数として使用するか、関数を返すように外部関数を変更する必要があります。

たとえば、addEventListener:

function message_me(m_text) {
    alert(m_text)
} 

second.addEventListener('click', 
    function() {
        message_me('shazam');
    }
);
ログイン後にコピー
匿名関数内に関数参照を提供することで、「2 番目のリンク」がクリックされたときにのみ message_me 関数が呼び出されるようにします。

以上がイベント リスナーが関数をすぐにトリガーするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート