Dla odrobiny tła, mam wiele pól wyboru, każdy ważony z innym "wynikiem". Gdy pole wyboru zostanie zmienione, muszę obliczyć wynik. Pomyślałem, że coś takiego działa, ale nie wygląda na to, że zdarzenie .change jest poprawnie powiązane.Jquery: Wiązanie zmiany na wiele pól wyboru
$(document).ready(function() {
bindSomeCheckboxes();
});
function bindSomeCheckboxes() {
var score=0;
var checkboxes = {
"id_1" : 3,
"id_2" : 1,
"id_3" : 2,
"id_4" : 5
};
$.each(checkboxes, function(key, value) {
$("#"+key).change(function(key,value) {
if ($("#"+key).is(':checked')) {
//add this ids value to score
} else {
//subtract value from score
}
});
});
}
Wiem, że poprawnie przechodzi przez macierz, ale alert w .change nigdy nie jest widoczny.
To powinno być ': checked' zamiast': clicked', zobacz moją odpowiedź uzyskać więcej informacji. – BrunoLM
Wygląda na to, że wszystkie odpowiedzi nie uwzględniają faktu, że każdy identyfikator ma unikalny "wynik". Właśnie dlatego mam odwzorowanie id -> score. Dokonałem kliknięcia -> zaznaczonej korekty powyżej i zmieniłem komentarze, aby pokazać, co próbuję osiągnąć. Przyznam, że mogę wszystko źle postąpić. ;) –
Dodałem odpowiedź, która zachowuje podstawową strukturę, z którą pracowałeś. Myślę, że próbujesz odwołać się do 'klucza' wewnątrz handler'a, myśląc, że będzie on miał ID. Kłopot polegał na tym, że dałeś swojemu handlerowi własny parametr 'key', który w rzeczywistości odnosi się do obiektu' event'. Usuń (lub zmień nazwę), a będziesz miał "klucz". Ale nie potrzebujesz tego, ponieważ masz bezpośrednie odniesienie do identyfikatora, którego potrzebujesz, ponieważ 'this' odnosi się do tego, który otrzymał zdarzenie, więc' this.id' jest jego identyfikatorem. – user113716