2011-02-04 20 views
36

jQuery sürüm 1.5 kullanıyorum. Ben jQuery'nin change() fonksiyonu de ve özellikle bu biraz bakıyorum:jQuery's change() yöntemiyle argümanları alan bir işlev nasıl kullanılır?

tam JavaScript bir "veri haritası" nedir
.change([ eventData ], handler(eventObject)) 
eventData: A map of data that will be passed to the event handler. 
handler(eventObject): A function to execute each time the event is triggered. 

? Aşağıdaki test işlevini bir olay işleyicisi olarak nasıl kullanabilirim?

var myHandler = function(msg){alert(msg);}; 

Bu denedim:

$("select#test").change(["ok"], myHandler); 

ve uyarı raporları [object Object] aynen JavaScript bir "veri haritası" nedir

cevap

56

Bkz. event.data. veri işleyicisi argüman olarak geçirilen değil, olay nesnesinin özelliği olarak:

$("select#test").change({msg: "ok"}, function(event) { 
    alert(event.data.msg); 
}); 

işleyici her zaman sadece event amacı bir bağımsız değişken, kabul eder. Bu, uyarınızın "[object Object]" göstermesinin nedeni budur, işleviniz olay nesnesini yazdırıyor. özel argümanlarla fonksiyonlarını kullanmak istiyorsanız
, başka fonksiyonun içine kaydırmak zorunda:

$("select#test").change({msg: "ok"}, function(event) { 
    myHandler(event.data.msg); 
}); 

ya da sadece

$("select#test").change(function(event) { 
    myHandler("ok"); 
}); 

Btw. seçici daha iyi $('#test') olarak yazılmıştır. Kimlikler benzersiz (olmalıdır). Etiket adını eklemeye gerek yoktur.

+0

Bu konuda dikkat edilmesi gereken bir şey, myHandler'ın bu şekilde çağrıldığında alması gereken $ (this) değeridir.Orijinal $ 'a ihtiyacınız varsa (bu) "tamam" dan sonra bir parametre olarak iletebilirsiniz. –

13

? , Ör .:

var data = { 
    foo: "I'm foo", 
    bar: "I'm bar" 
}; 

Tüm JavaScript nesneleri esasen vardır

Temelde sadece bir obje (diğer adıyla "sözlükleri" aka "çağrışımlı diziler") eşler.

Aşağıdaki test işlevini olay işleyicisi olarak nasıl kullanabilirim? Başka bir işleve sararak By

:

o her değiştirdiğinde seçme kutusunun değeri ile myHandler çağırır
$("select#test").change(function() { 
    myHandler($(this).val()); 
}); 

.

Eğer eventData bölümünü kullanmak istiyorsanız, önce işleyicisi bir nesne ekleyin:

, ilk argüman olarak "Ben foo" ile seçin sonra değerini myHandler çağırır
$("select#test").change({ 
    foo: "I'm foo" 
}, function(event) { 
    myHandler(event.data.foo, $(this).val()); 
}); 

kutusu, her değiştiğinde.

İlgili konular