JQuery kodu ile şunun gibi:
$("#myid").click(myfunction);
function myfunction(arg1, arg2) {/* something */}
myfunctionJQuery kullanırken bağımsız değişkenleri nasıl iletebilirim ?
JQuery kodu ile şunun gibi:
$("#myid").click(myfunction);
function myfunction(arg1, arg2) {/* something */}
myfunctionJQuery kullanırken bağımsız değişkenleri nasıl iletebilirim ?
Yanıtlar:
En basit yol, bunu böyle yapmaktır (işleve hiçbir olay bilgisinin iletilmesini istemediğinizi varsayarak) ...
$("#myid").click(function() {
myfunction(arg1, arg2);
});
jsFiddle .
Bu, clickolay tetiklendiğinde çağrılan anonim bir işlev oluşturur . Bu da myfunction()sağladığınız argümanlarla sonuçlanacaktır.
ThisBinding( thisİşlev çağrıldığında değeri , olayı tetikleyen öğeye ayarlayın) tutmak istiyorsanız , ardından işlevi ile çağırın call().
$("#myid").click(function() {
myfunction.call(this, arg1, arg2);
});
jsFiddle .
Referansı, örneğinizin ifade ettiği şekilde doğrudan iletemezsiniz, aksi takdirde onun tek bağımsız değişkeni jQuery eventnesnesi olur .
Eğer varsa do referansı geçmek istiyorum, sen jQuery'nin kaldıraç gerekir proxy()(çapraz tarayıcı sarıcı içindir fonksiyonu Function.prototype.bind()). Bu , argümandan önce bağlanan argümanları iletmenize izin verir event.
$("#myid").click($.proxy(myfunction, null, arg1, arg2));
jsFiddle .
Bu örnekte, myfunction()ile gerçekleştirilebilir ki onun ThisBindingbozulmamış ( nulldeğildir bir amacı, bu nedenle, normal thisdurum kullanılan tetikleyen elemanın değeri) bağımsız değişken (sırayla) ile birlikte arg1, arg2ve son olarak jQuery eventgöz ardı edebilirsiniz nesne gerekli değilse (işlevin argümanlarında adını bile koymayın).
Ayrıca, jQuery eventnesnesini dataveri iletmek için de kullanabilirsiniz , ancak bu, ( sorunuzun bahsettiği gibi işlev bağımsız değişkenleri değildir) myfunction()aracılığıyla ona erişmek için değişiklik yapmayı veya en azından önceki örnek veya oluşturulmuş gibi manuel bir proxy işlevini tanıtmayı gerektirir. ikinci örneği kullanarak.event.data.arg1
myfunction(this, arg1, arg2)için, anonim işleyiciden arayın . O zaman işleviniz yapabilirmyfunction(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'
});
Ayrıca, açma ve kapama yöntemlerini kullanarak belirli olay işleyicileri bağlamanıza ve bağlantısını kaldırmanıza olanak tanır.
Misal:
$("#myid").off('click', myfunction);
Bu, myfunction işleyicisinin #myid ile olan bağlantısını çözer
Alex'in cevabını kesinlikle kullanmanız gerekirken, prototip kitaplığının "bağlama" yöntemi Ecmascript 5'te standartlaştırılmıştır ve yakında tarayıcılarda yerel olarak uygulanacaktır. Şu şekilde çalışır:
jQuery("#myid").click(myfunction.bind(this, arg1, arg2));
this, örneğin, bu yöntemi kullanırsanız farklı bir bağlamda da set olmak bind()için ing thisbu bağlamda (global) sahip o tıklama işleyicisi ile sonuçlanabilir windowolarak nesneyi thisreferansı aksine #myideleman?
people reading my answers are smart enough to figure these details out themselveshakkında değil, varsayım için @Breton'a yönelikti.
Eski iş parçacığı, ancak arama amaçlı; Deneyin:
$(selector).on('mouseover',...);
... ve "veri" parametresine bakın: http://api.jquery.com/on/
Örneğin:
function greet( event ) {
alert( "Hello " + event.data.name );
}
$( "button" ).on( "click", {name: "Karl"}, greet );
$( "button" ).on( "click", {name: "Addy"}, greet );