今日、要素のイベントを登録するときに、addEventListenerを使用して問題が発生したことがあります。それを要約する必要があると感じました。これは、パラメータとしてのJS関数によって引き起こされる問題です。まず次のコードを見てください。次のコードに何か問題があると思いますか? id3に対応する要素をクリックした後にid3をポップアップさせることは可能でしょうか?
例 1
var obj3=document.getElementById('id3'); obj3.addEventListener('click',curClick('id1'),true); function curClick(id){ alert(id); }
答えは「いいえ」です。ページが読み込まれるときにこのコード行は id3 をポップアップするため、期待する効果は得られません。 id3 に対応する要素をクリックしても、ページ上で何も起こりません。
そこで、次の 2 つの状況にコードを変更しました:
例 2
var obj3=document.getElementById('id3'); obj3.addEventListener('click',function(e){curClick('id3');stopPropagation(e)},true); function curClick(id){ alert(id); }
例 3
var obj1=document.getElementById('id1'); obj1.addEventListener('click',curClick1,true); function curClick1(){ alert('okey'); }
今回は正常に実行されるのはなぜでしょうか。
JSの世界ではcurClick('id3')はパラメータとして渡すのではなく直接curClick('id3')を呼び出すため、パラメータとして渡したい場合は渡す必要がありません。パラメータを渡す必要がある場合は、関数名を直接渡すだけです
方法 1: 匿名関数の助けを借りて、渡される関数を匿名関数に入れて、匿名関数を使用します。例 2
例: function(){myfunction(val1,val2,...);} をパラメータとして渡します。
その2: 渡す必要がある関数を書き換えます
function curClick1(val){ <span style="white-space:pre"> </span>return function(){ alert(val); }; }
上記は、JS で関数を別の関数のパラメーターとして渡す方法の概要です。さらに関連する内容については、PHP 中国語 Web サイト ( www.php.cn)!