Mam mały problem. Oto krótkie wyjaśnienie.
Mam 12 pól wyboru na standardowym formularzu. Muszę przejść przez każdy z nich i dowiedzieć się, które z nich są zaznaczone, a które niezaznaczone.
Korzystając z tego, mogę następnie zbudować ciąg, który następnie wprowadzam do pola bazy danych. Oto przykład.
(Check1 - zaznaczone)
(Check2 -
niesprawdzone ) (Check3 - zaznaczone)
1,0,1
Jak dotąd mam ten kawałek kodu.
$('input[type=checkbox]').each(function () {
if (this.checked) {
console.log($(this).val());
}
});
Działa idealnie, z tym wyjątkiem, że przywraca tylko te sprawdzone, a nie wszystkie.
Przepraszam za nowe pytanie. Jestem trochę nowy w jquery.
Odpowiedzi:
Aby zbudować ciąg wynikowy dokładnie w pokazanym formacie, możesz użyć tego:
var sList = ""; $('input[type=checkbox]').each(function () { sList += "(" + $(this).val() + "-" + (this.checked ? "checked" : "not checked") + ")"; }); console.log (sList);
Zgodziłbym się jednak z @SLaks, myślę, że powinieneś ponownie przemyśleć strukturę, w której będziesz przechowywać to w swojej bazie danych.
EDYCJA : Przepraszam, źle odczytałem format wyjściowy, którego szukałeś. Oto aktualizacja:
var sList = ""; $('input[type=checkbox]').each(function () { var sThisVal = (this.checked ? "1" : "0"); sList += (sList=="" ? sThisVal : "," + sThisVal); }); console.log (sList);
źródło
1
s i0
s.Korzystanie z selektorów
Możesz uzyskać wszystkie zaznaczone pola wyboru w ten sposób:
var boxes = $(":checkbox:checked");
I wszystkie nie sprawdzone w ten sposób:
var nboxes = $(":checkbox:not(:checked)");
Możesz po prostu przejrzeć jedną z tych kolekcji i zapisać te nazwy. Jeśli czegoś nie ma, wiesz, że zostało sprawdzone lub nie. W PHP, jeśli masz tablicę nazw, które zostały sprawdzone, możesz po prostu
in_array()
poprosić o sprawdzenie, czy dane pole powinno zostać sprawdzone w późniejszym terminie.Serializuj
jQuery ma również metodę serializacji, która zachowa stan kontrolek formularza. Na przykład przykład udostępniony na stronie jQuery jest następujący:
single=Single2&multiple=Multiple&multiple=Multiple3&check=check2&radio=radio2
Umożliwi to zachowanie informacji, które elementy zostały również sprawdzone.
źródło
Możesz przeglądać wszystkie pola wyboru, pisząc
$(':checkbox').each(...)
.Jeśli dobrze rozumiem Twoje pytanie, szukasz następującego kodu:
var str = ""; $(':checkbox').each(function() { str += this.checked ? "1," : "0,"; }); str = str.substr(0, str.length - 1); //Remove the trailing comma
Ten kod przejdzie przez wszystkie pola wyboru i doda jeden
1,
lub0,
do ciągu.źródło
Nie sądzę, aby poświęcono wystarczająco dużo czasu na rozważania dotyczące schematu poruszone w oryginalnym poście. Więc tutaj jest coś do rozważenia dla każdego początkującego.
Powiedzmy, że poszedłeś do przodu i stworzyłeś to rozwiązanie. Wszystkie twoje wartości pomocnicze są łączone w jedną wartość i przechowywane w bazie danych. Rzeczywiście oszczędzasz [trochę] miejsca w swojej bazie danych i trochę czasu na kodowaniu.
Rozważmy teraz, że musisz wykonać częste i łatwe zadanie polegające na dodaniu nowego pola wyboru między obecnymi polami wyboru 3 i 4. Twój kierownik ds. Rozwoju, klient, cokolwiek oczekuje, że będzie to prosta zmiana.
Dodajesz więc pole wyboru do interfejsu użytkownika (łatwa część). Twój kod pętli już połączyłby wartości bez względu na liczbę pól wyboru. Wydajesz się również, że twoje pole bazy danych jest po prostu varchar lub innym typem ciągu, więc powinno też być w porządku.
Co się dzieje, gdy klienci lub Ty próbujesz przeglądać dane sprzed zmiany? Zasadniczo serializujesz od lewej do prawej. Jednak teraz wszystkie wartości po 3 są zmniejszone o 1 znak. Co zamierzasz zrobić ze wszystkimi istniejącymi danymi? Czy zamierzasz napisać aplikację, wyciągnąć ją z bazy danych, przetworzyć w celu dodania domyślnej wartości dla nowej pozycji pytania, a następnie zapisać ją z powrotem w bazie danych? Co się dzieje, gdy masz kilka nowych wartości w odstępie tygodnia lub miesiąca? Co się stanie, jeśli przeniesiesz lokalizacje, a jQuery przetwarza je w innej kolejności? Wszystkie twoje dane są w węźle i muszą zostać ponownie przetworzone, aby je zmienić.
Cała koncepcja NIE zapewniania ścisłej relacji klucz-wartość jest ludacris i zakończy się wpędzaniem cię w kłopoty raczej wcześniej niż później. Ci z was, którzy to rozważają, nie powinni. Inne sugestie dotyczące zmian schematu są w porządku. Użyj tabeli podrzędnej, większej liczby pól w tabeli głównej, tabeli pytań i odpowiedzi itp. Po prostu nie przechowuj danych bez etykiet, gdy struktura tych danych może ulec zmianie.
źródło
$.extend($.expr[':'], { unchecked: function (obj) { return ((obj.type == 'checkbox' || obj.type == 'radio') && !$(obj).is(':checked')); } }); $("input:checked") $("input:unchecked")
źródło