2011-02-04 12 views
36

Używam jQuery w wersji 1.5. szukam w jQuery change() funkcji i specjalnie w tym kawałku:Jak korzystać z funkcji, która pobiera argumenty za pomocą metody change() jQuery?

.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. 

Czym dokładnie jest „mapa danych” w JavaScript? Jak mogę użyć następującej funkcji testu jako procedury obsługi zdarzeń?

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

Próbowałem to:

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

i raporty alarmowe [object Object]

Odpowiedz

56

Zobacz event.data. Dane nie są przekazywane jako argument do obsługi, ale jako własność obiektu zdarzenia:

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

Handler zawsze przyjmuje tylko jeden argument, który jest przedmiotem event. To jest powód, dla którego twój alert pokazuje "[object Object]", twoja funkcja drukuje obiekt zdarzenia.
Jeśli chcesz korzystać z funkcji niestandardowych argumentów, trzeba zawinąć je w innej funkcji:

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

lub po prostu

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

Btw. selektor jest lepiej napisany jako $('#test'). Identyfikatory są (powinny być) unikalne. Nie ma potrzeby dodawania nazwy znacznika.

+0

Jedną z rzeczy, o których należy pamiętać, jest to, że $ (this), który otrzymuje myHandler, jest inne, gdy zostanie wywołane w ten sposób.Jeśli potrzebujesz oryginalnego $ (this), możesz przekazać go jako parametr po "ok". –

13

Czym dokładnie jest "mapa danych" w JavaScript?

zasadzie tylko przedmiot, np .:

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

Wszystkie obiekty JavaScript są zasadniczo mapy (aka "słowniki" aka "tablice asocjacyjne").

Jak używać poniższej funkcji testowej jako procedury obsługi zdarzeń?

owijając go w innej funkcji:

$("select#test").change(function() { 
    myHandler($(this).val()); 
}); 

To nazywa myHandler z wartością pola zaznaczania, kiedy to zmienia.

Jeśli chcesz użyć eventData udział dodać obiekt przed Handler:

$("select#test").change({ 
    foo: "I'm foo" 
}, function(event) { 
    myHandler(event.data.foo, $(this).val()); 
}); 

To nazywa myHandler z „Jestem foo” jako pierwszy argument, wówczas wartość select pudełko, kiedy się zmieni.

Powiązane problemy