オブジェクトを動的に作成し、それにonclick
イベントをバインドしています:
jQuery('<a/>', {
click: function() { foo(arg1, arg2) },
...
})
すべてが正常に機能しています。問題は、引数を使用して関数をfunciton()
呼び出すためのラッパーを必要としないように単純化できるかどうかです。foo
前もって感謝します。
jQuery イベント ハンドラーに追加の引数を渡すことはできません。jQuery はイベント オブジェクトを 1 つの引数としてイベント ハンドラーに渡します。
jQuery 1.7 以降では、on()関数を使用して、ハンドラー内で使用するデータを含むオブジェクトを渡すことにより、イベント オブジェクトを拡張できます。event.data
オブジェクトのデータにアクセスできます
function foo(event) {
event.data.arg1;
event.data.arg2;
}
jQuery('<a/>').on('click', {arg1: val1, arg2: val2}, foo)
匿名関数によって提供される追加のクロージャは必要な手順です — ECMAscript 5 のサポートが確実でない限り (IE8 以下ではサポートされていません)、その場合は次のbind
メソッドを使用できます。
jQuery('<a/>', {
click: foo.bind(this, arg1, arg2)
})
のシムを含むUnderscoreマイクロライブラリを含める意思がある場合は、IE8 以下でもこのメソッドを使用できます。bind
jQuery('<a/>', {
click: _.bind(foo, this, arg1, arg2)
})
これらのいずれかを実行できない場合は、運が悪いです。