次のようなjQueryコード:
$("#myid").click(myfunction);
function myfunction(arg1, arg2) {/* something */}
myfunction
jQueryの使用中に引数を渡すにはどうすればよいですか?
次のようなjQueryコード:
$("#myid").click(myfunction);
function myfunction(arg1, arg2) {/* something */}
myfunction
jQueryの使用中に引数を渡すにはどうすればよいですか?
回答:
最も簡単な方法は、そのようにすることです(関数にイベント情報を渡したくない場合)...
$("#myid").click(function() {
myfunction(arg1, arg2);
});
これにより、click
イベントがトリガーされたときに呼び出される匿名関数が作成されます。これmyfunction()
により、指定した引数が呼び出されます。
ThisBinding
(this
関数が呼び出されたときの値、イベントをトリガーした要素に設定)を保持したい場合は、で関数を呼び出しますcall()
。
$("#myid").click(function() {
myfunction.call(this, arg1, arg2);
});
例に示されている方法で参照を直接渡すことはできません。そうしないと、単一の引数がjQuery event
オブジェクトになります。
あなたがいる場合か、参照を渡したい、あなたはjQueryの活用しなければならないproxy()
(クロスブラウザのラッパーのある機能をFunction.prototype.bind()
)。これにより、引数の前にバインドされている引数を渡すことができますevent
。
$("#myid").click($.proxy(myfunction, null, arg1, arg2));
この例でmyfunction()
は、はThisBinding
そのまま(null
オブジェクトではないためthis
、イベントをトリガーした要素の通常の値が使用されます)、引数(順番に)arg1
、arg2
最後にevent
無視できるjQuery オブジェクトで実行されます必要ない場合(関数の引数に名前を付けないでください)。
jQuery event
オブジェクトのdata
を使用してデータを渡すこともできますが、これには、(質問の言及のような関数引数ではない)myfunction()
経由でアクセスするための変更が必要か、少なくとも前の例や生成されたものなどの手動プロキシ関数を導入する必要があります後者の例を使用します。event.data.arg1
myfunction(this, arg1, arg2)
は、匿名ハンドラーから呼び出します。その後、関数で実行できますmyfunction(el, arg1, arg2) { alert($(el).val()); }
myfunction.call(this, arg1, arg2)
。
$("#myid").on('click', {arg1: 'hello', arg2: 'bye'}, myfunction);
function myfunction(e) {
var arg1 = e.data.arg1;
var arg2 = e.data.arg2;
alert(arg1);
alert(arg2);
}
//call method directly:
myfunction({
arg1: 'hello agian',
arg2: 'bye again'
});
また、onおよびoffメソッドを使用して、特定のイベントハンドラーをバインドおよびバインド解除できます。
例:
$("#myid").off('click', myfunction);
これにより、myfunctionハンドラーが#myidからバインド解除されます
確かにアレックスの答えを使用する必要がありますが、プロトタイプライブラリの「バインド」メソッドはEcmascript 5で標準化されており、まもなくブラウザにネイティブに実装されます。それはこのように動作します:
jQuery("#myid").click(myfunction.bind(this, arg1, arg2));
this
あなたは、例えば、この方法を使用する場合は、別のコンテキストにセットをすることbind()
にそれをINGのthis
そのコンテキストで(グローバル)を有するそのクリックハンドラをもたらすことができるwindow
ように、オブジェクトをthis
参照とは対照的に#myid
要素?
people reading my answers are smart enough to figure these details out themselves
ではなく、@ Bretonを想定したものです。
古いスレッドですが、検索目的です。試してください:
$(selector).on('mouseover',...);
...そして「データ」パラメータをチェックアウト:http : //api.jquery.com/on/
例えば:
function greet( event ) {
alert( "Hello " + event.data.name );
}
$( "button" ).on( "click", {name: "Karl"}, greet );
$( "button" ).on( "click", {name: "Addy"}, greet );