この問題が発生しました:Javascript eventhandler:パラメータを持つハンドラの実行に問題があります
パラメータを必要とするイベントハンドラを定義しました。
var handler = function(p1, p2){
//some code
}
次に、イベントハンドラを関数内のオブジェクトに追加します。
function foo(p1, p2){
//Some code
obj.addEventListener('click', handler(p1, p2), false)
}
上記のコードは正しくありません。イベントに耳を傾けません。代わりに、即座に機能を実行します。これを修正するには、handler(p1, p2)
を消去し、代わりにfunction(){ handler(p1, p2) }
を挿入してください。しかし、問題は、後者の解決策では不可能な、イベントリスナーを削除する別の機能があることです。
function koo(){
//Some code
obj.removeEventListener('click', handler, false)
}
これを修正するにはどうすればよいですか?
function foo(){
//Some code
obj.addEventListener('click', handler, false)
}
それを呼び出すのではなく、関数を渡す:
あなたは一つの要素またはいくつかのためにのみこれをやっていますか? 'foo'と' koo'はどのスコープで生きていますか? 'koo'はどのハンドラを削除するのか –
私はあなたを正しく理解していれば、私はいくつかの要素のためにそれをやっています、そして、fooとkooは、他の関数の中ではなく、グローバルスコープで定義されています。また、イベントハンドラを削除するkoo以外の関数もいくつかあります。 – einstein