1. ホーム
  2. javascript

[解決済み] jQueryのイベントハンドラに引数を渡すにはどうしたらよいですか?

2023-01-09 03:52:40

質問

のようなjQueryのコードで。

$("#myid").click(myfunction);

function myfunction(arg1, arg2) {/* something */}

に引数を渡すにはどうしたらよいでしょうか? myfunction に引数を渡すにはどうしたらよいでしょうか?

どのように解決するのですか?

最も簡単な方法は、次のようにすることです(関数に渡されるイベント情報は一切必要ないと仮定しています)...

$("#myid").click(function() {
    myfunction(arg1, arg2);
});

jsFiddle .

これは無名関数を作成するものです。 click イベントが発生したときに呼び出されます。これは、順番に myfunction() を引数として呼び出します。

を維持したい場合は ThisBinding (の値)。 this の値で、イベントを引き起こした要素に設定されます)、そして、関数を call() .

$("#myid").click(function() {
    myfunction.call(this, arg1, arg2);
});

jsFiddle .

あなたの例にあるような方法で直接参照を渡すことはできませんし、その単一の引数は jQuery event オブジェクトになります。 .

もし、あなたが する に参照を渡したい場合は、jQueryの proxy() 関数 (これは Function.prototype.bind() ). これにより、引数を渡すことができ、引数はバインドされている の前に の前にバインドされます。 event 引数の前にあります。

$("#myid").click($.proxy(myfunction, null, arg1, arg2));   

jsFiddle .

この例では myfunction() が実行され、その ThisBinding がそのまま実行されます ( null はオブジェクトではないので、通常の this の値が使われます)、そして引数(順番に) arg1 , arg2 で、最後にjQueryの event オブジェクトがありますが、これは必要なければ無視してもかまいません (関数の引数で名前を付けることさえしません)。

また、jQueryの event オブジェクトの data を使ってデータを渡すことができますが、そのためには myfunction() を介してアクセスするために event.data.arg1 (を介してアクセスすることができます(これは 関数の引数 を使用するか、少なくとも前者の例のように手動でプロキシ関数を導入するか、後者の例のように生成されたものを使用します。