Dengan kode jQuery seperti:
$("#myid").click(myfunction);
function myfunction(arg1, arg2) {/* something */}
Bagaimana cara menyampaikan argumen myfunctionsaat menggunakan jQuery?
Dengan kode jQuery seperti:
$("#myid").click(myfunction);
function myfunction(arg1, arg2) {/* something */}
Bagaimana cara menyampaikan argumen myfunctionsaat menggunakan jQuery?
Jawaban:
Cara termudah adalah melakukannya seperti itu (dengan asumsi Anda tidak ingin informasi acara apa pun diteruskan ke fungsi) ...
$("#myid").click(function() {
myfunction(arg1, arg2);
});
jsFiddle .
Ini membuat fungsi anonim, yang dipanggil saat clickacara dipicu. Ini pada gilirannya akan memanggil myfunction()dengan argumen yang Anda berikan.
Jika Anda ingin mempertahankan ThisBinding(nilai thissaat fungsi dipanggil, setel ke elemen yang memicu kejadian), maka panggil fungsi dengan call().
$("#myid").click(function() {
myfunction.call(this, arg1, arg2);
});
jsFiddle .
Anda tidak dapat meneruskan referensi secara langsung dengan cara yang dinyatakan contoh Anda, atau argumen tunggalnya adalah objek jQueryevent .
Jika Anda tidak ingin lulus referensi, Anda harus memanfaatkan jQuery proxy()fungsi (yang merupakan browser wrapper salib untuk Function.prototype.bind()). Hal ini memungkinkan Anda melewati argumen, yang terikat sebelum itu eventargumen.
$("#myid").click($.proxy(myfunction, null, arg1, arg2));
jsFiddle .
Dalam contoh ini, myfunction()akan dieksekusi dengan ThisBindingutuh ( nullbukan objek, jadi nilai normal thiselemen yang memicu kejadian digunakan), bersama dengan argumen (dalam urutan) arg1, arg2dan akhirnya eventobjek jQuery , yang dapat Anda abaikan. jika tidak diperlukan (bahkan jangan beri nama dalam argumen fungsi).
Anda juga dapat menggunakan eventobjek jQuery datauntuk meneruskan data, tetapi ini akan memerlukan modifikasi myfunction()untuk mengaksesnya melalui event.data.arg1(yang bukan merupakan argumen fungsi seperti pertanyaan Anda menyebutkan), atau setidaknya memperkenalkan fungsi proxy manual seperti contoh sebelumnya atau yang dihasilkan menggunakan contoh terakhir.
myfunction(this, arg1, arg2)dari penangan anonim. Kemudian fungsi Anda dapat melakukannyamyfunction(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'
});
Juga memungkinkan Anda untuk mengikat dan melepaskan penangan kejadian tertentu menggunakan metode hidup dan mati.
Contoh:
$("#myid").off('click', myfunction);
Ini akan melepaskan penangan fungsi saya dari #myid
sementara Anda pasti harus menggunakan jawaban Alex, metode "bind" perpustakaan prototipe telah distandarisasi di Ecmascript 5, dan akan segera diimplementasikan di browser secara native. Ini bekerja seperti ini:
jQuery("#myid").click(myfunction.bind(this, arg1, arg2));
thisdisetel ke konteks yang berbeda jika Anda menggunakan metode ini, misalnya, bind()memasukkannya ke thisdalam konteks itu (global) dapat mengakibatkan handler klik tersebut memiliki windowobjek thissebagai lawan referensi ke #myidelemen?
people reading my answers are smart enough to figure these details out themselves, bukan tentang Ecmascript.
Benang tua, tapi untuk tujuan pencarian; mencoba:
$(selector).on('mouseover',...);
... dan periksa parameter "data": http://api.jquery.com/on/
misalnya:
function greet( event ) {
alert( "Hello " + event.data.name );
}
$( "button" ).on( "click", {name: "Karl"}, greet );
$( "button" ).on( "click", {name: "Addy"}, greet );