Bardziej szczegółowe (i bardzo przydatne!) Pytanie: „Jak mogę sprawdzić element w zestawie pól wyboru WARTOŚĆ?”, Myślę, że możemy również omówić tutaj, a poniżej opublikowałem odpowiedź.
Zauważ, że jest to podejście stosowane w testach jednostkowych jQuery przed wersją 1.6 i jest lepsze niż użycie, $('.myCheckbox').removeAttr('checked');ponieważ ta ostatnia, jeśli pole zostało początkowo zaznaczone, zmieni zachowanie wywołania .reset()w dowolnej formie, która go zawiera - subtelne, ale prawdopodobnie niepożądana zmiana zachowania.
Aby uzyskać więcej informacji, niektóre niepełne omówienie zmian w obsłudze checkedatrybutu / właściwości w przejściu z wersji 1.5.x na wersję 1.6 można znaleźć w informacjach o wersji 1.6 oraz w sekcji Dokumentacja kontra atrybuty ..prop()
Na marginesie, jQuery 1.6.1 powinno naprawić problem, o którym wspomniałem, abyśmy wszyscy mogli w dalszym ciągu korzystać z $ (...).
Prop
19
„Jeśli pracujesz tylko z jednym elementem, zawsze będzie on najszybszy w użyciu DOMElement.checked = true”. Byłoby to jednak nieistotne, ponieważ to tylko jeden element ...
Tyler Crompton
46
Jak mówi Tyler, jest to nieznaczna poprawa wydajności. Dla mnie kodowanie przy użyciu wspólnego interfejsu API czyni go bardziej czytelnym niż mieszanie natywnego interfejsu API i interfejsów API jQuery. Zostałbym przy jQuery.
Charlie Kilian
18
@TylerCrompton - Oczywiście nie chodzi wyłącznie o wydajność, ale robienie $(element).prop('checked')jest kompletnym marnotrawstwem pisania. element.checkedistnieje i należy go używać w przypadkach, w których już maszelement
sprawdzany jest również $ (selektor). sprawdzane, aby sprawdzić
eomeroff
6
Wypróbowałem ten dokładny kod i nie działało to dla mnie w przypadku pola wyboru zaznacz wszystko / wybierz brak, które musi zaznaczyć i odznaczyć wszystkie, a także sprawdzić ich stan. Zamiast tego spróbowałem odpowiedzi Christophera Harrisa i to załatwiło sprawę.
JD Smith
Dlaczego warto używać „formularza #mycheckbox” zamiast po prostu „#mycheckbox”? Identyfikator jest już unikalny w całym dokumencie, można go wybrać szybciej i łatwiej.
YuriAlbuquerque
@YuriAlbuquerque to był przykład. możesz użyć dowolnego selektora.
bchhun
5
$ (selektor) .checked nie działa. W jQuery nie ma metody „sprawdzonej”.
Brendan Byrd
318
Jest to poprawny sposób sprawdzania i odznaczając pola wyboru z jQuery, jak to jest standard cross-platform, i będzie dopuszczać reposts formularza.
Robiąc to, używasz standardów JavaScript do zaznaczania i odznaczania pól wyboru, więc każda przeglądarka, która poprawnie implementuje właściwość „zaznaczone” elementu pola wyboru, uruchomi ten kod bezbłędnie. To powinno być wszystkich głównych przeglądarek, ale nie jestem w stanie przetestować poprzedni Internet Explorer 9.
Problem (jQuery 1.6):
Gdy użytkownik kliknie pole wyboru, to pole wyboru przestaje odpowiadać na zmiany atrybutu „zaznaczone”.
Oto przykład atrybutu checkbox, który nie wykonał zadania po tym, jak ktoś kliknął pole wyboru (dzieje się tak w Chrome).
Korzystając z właściwości JavaScript „zaznaczonej” w elementach DOM , jesteśmy w stanie rozwiązać problem bezpośrednio, zamiast próbować zmanipulować DOM do robienia tego, co chcemy .
Ta wtyczka zmieni właściwość zaznaczenia dowolnych elementów wybranych przez jQuery oraz pomyślnie zaznaczy i odznacz pola wyboru we wszystkich okolicznościach. Chociaż może się to wydawać nadmiernym obciążeniem, poprawi komfort korzystania z witryny i zapobiegnie frustracji użytkowników.
(function( $ ){
$.fn.checked =function(value){if(value ===true|| value ===false){// Set the value of the checkbox
$(this).each(function(){this.checked = value;});}elseif(value ===undefined|| value ==='toggle'){// Toggle the checkbox
$(this).each(function(){this.checked =!this.checked;});}returnthis;};})( jQuery );
Alternatywnie, jeśli nie chcesz używać wtyczki, możesz użyć następujących fragmentów kodu:
W swoim pierwszym przykładzie JSFiddle powinieneś używać removeAttr('checked')zamiastattr('checked', false)
Daniel X Moore
4
@DanielXMoore, omijasz ten problem. Przykładem było pokazanie, że po kliknięciu pola wyboru przez użytkownika przeglądarka nie odpowiadachecked zmiany atrybutów, niezależnie od metody ich zmiany.
cwharris
3
@ChristopherHarris Ok, masz rację, tęskniłem. Od wersji jQuery 1.6 nie powinieneś jednak używać metody .prop? $('.myCheckBox').prop('checked', true)W ten sposób automatycznie zastosuje się do całego zestawu dopasowanych elementów (tylko przy ustawianiu, uzyskanie jest wciąż tylko pierwszym)
Daniel X Moore
Tak. propjest zdecydowanie odpowiednim sposobem ustawiania atrybutów elementu.
cwharris
@ChristopherHarris, dodałem to, czego potrzebowałem do wtyczki, aby zapewnić pewną elastyczność parametrów. Ułatwiło to przetwarzanie inline bez konwersji typu. Zwłaszcza z różnych baz danych z „pomysłami” na temat tego, co jest „prawdziwe”. Skrzypce: jsfiddle.net/Cyberjetx/vcp96
Ostatni wywoła zdarzenie kliknięcia dla pola wyboru, pozostałe nie. Więc jeśli masz niestandardowy kod w zdarzeniu onclick dla pola wyboru, które chcesz uruchomić, użyj ostatniego.
To jest niedokładne. ustawienie atrybutu „zaznaczone” na „” nie usunie zaznaczenia pól wyboru przynajmniej w chrome.
cwharris
@xixonia Testowałem przed opublikowaniem skrzypce nie działa, ponieważ nie zmieniłeś menu po lewej stronie, aby uwzględnić jquery
mcgrailm
1
mcgralim - w 1.6 jeszcze łatwiejsze .... $(".mycheckbox").prop("checked", true/false)
krasnolud
2
@ MarkAmery wspomniałeś, że mój post nic nie dodał w momencie postu, ale jest to dokładne. Jeśli spojrzysz na historię zaakceptowanej odpowiedzi, przekonasz się, że sugerują usunięcie elementu. Co uniemożliwia zresetowanie formularza i dlatego na początku pisałem.
mcgrailm,
1
@mcgrailm Poszedłem naprzód i zmodyfikowałem zaakceptowaną odpowiedź w świetle twoich uwag. Jeśli chcesz rzucić na to okiem i sprawdzić, czy dobrze wygląda w obecnym stanie, doceniłbym to. Jeszcze raz przepraszam za ostrą krytykę, która przynajmniej częściowo była bardzo myląca.
Mark Amery
51
Wybiera elementy, które mają określony atrybut o wartości zawierającej podany podciąg „ckbItem”:
$('input[name *= ckbItem]').prop('checked',true);
Wybiera wszystkie elementy, które zawierają atrybut ckbItem w swoim atrybucie nazwy.
Pamiętaj, że w typowym zestawie pól wyboru wszystkie znaczniki wejściowe mają tę samą nazwę, różnią się atrybutemvalue : dla każdego wejścia zestawu nie ma identyfikatora.
Odpowiedź Xiana można rozszerzyć za pomocą bardziej szczegółowego selektora , używając następującego wiersza kodu:
To nie odpowiada na pytanie (pytanie dotyczy ustawienia, czy pole wyboru jest zaznaczone, a nie ustalenia, czy pole wyboru jest zaznaczone). Jest to również dość brzydki sposób określania, czy pole wyboru jest zaznaczone (po pierwsze, wykorzystujesz nieoczywisty fakt, .val()który zawsze powróci undefinedpo wywołaniu 0 elementów w celu wykrycia, że obiekt jQuery jest pusty, kiedy możesz po prostu sprawdź .lengthzamiast tego) - więcej informacji można znaleźć na stackoverflow.com/questions/901712/ ...
Mark Amery
42
Aby zaznaczyć pole wyboru przy użyciu jQuery 1.6 lub wyższej, po prostu wykonaj następujące czynności:
checkbox.prop('checked',true);
Aby odznaczyć, użyj:
checkbox.prop('checked',false);
Oto, co lubię używać do przełączania pola wyboru za pomocą jQuery:
$("#check").on("click",function(){var chk = document.getElementById('check').checked;var arr = document.getElementsByTagName("input");if(chk){for(var i in arr){if(arr[i].name =='check') arr[i].checked =true;}}else{for(var i in arr){if(arr[i].name =='check') arr[i].checked =false;}}});
- 1; mieszanie selektorów jQuery jak $("#check")z surowymi wywołaniami DOM API jak document.getElementsByTagName("input")wydaje mi się nieeleganckie, szczególnie biorąc pod uwagę, że formożna tutaj uniknąć pętli .prop(). Niezależnie od tego jest to kolejna późna odpowiedź, która nie dodaje nic nowego.
Mark Amery
20
Inne możliwe rozwiązanie:
var c = $("#checkboxid");if(c.is(":checked")){
$('#checkboxid').prop('checked',false);}else{
$('#checkboxid').prop('checked',true);}
W programie Internet Explorer wcześniejszym niż wersja 9 użycie .prop () w celu ustawienia właściwości elementu DOM na wartość inną niż prosta wartość pierwotna (liczba, łańcuch lub wartość logiczna) może powodować wycieki pamięci, jeśli właściwość nie zostanie usunięta (użycie .removeProp ( )) przed usunięciem elementu DOM z dokumentu. Aby bezpiecznie ustawić wartości dla obiektów DOM bez wycieków pamięci, użyj .data ().
- 1 za to, że jest to odpowiedź tylko na kod, nie odpowiada bezpośrednio na pytanie i nie dodaje niczego, czego inne odpowiedzi jeszcze nie obejmowały.
Mark Amery
15
Jest to prawdopodobnie najkrótsze i najłatwiejsze rozwiązanie:
@MarkAmery Akceptowana odpowiedź nie obejmuje tego, jak to zrobić bez jQuery. Moja odpowiedź stanowi dodatkową korzyść w stosunku do przyjętej odpowiedzi.
„Nie działało”, ponieważ 'false'zostało przekonwertowane na wartość boolowską, co spowodowało, że true- pusty łańcuch ocenia, falsewięc „działał”. Zobacz to skrzypce na przykład, co mam na myśli.
Shadow Wizard is Ear For You
@ chris97ong Cofnąłem twoją edycję; gdy ktoś mówi: „Nie używaj kodu poniżej, ponieważ nie działa”, poprawienie tego kodu, pozostawiając komentarz stwierdzający, że nie działa, jest szkodliwe - zwłaszcza gdy łamie wyjaśnienie w komentarzach, dlaczego kod nie jest działa. To powiedziawszy, ta odpowiedź jest nadal nieco zagmatwana i zasługuje na głosowanie z powodów podanych przez tpower i ShadowWizard.
Mark Amery
1
używaj wartości true i false dla boolean, nie używaj „true” ani „false” (łańcuchy).
Jone Polvora
13
Po zaznaczeniu pola wyboru, takiego jak;
$('.className').attr('checked','checked')
to może nie wystarczyć. Powinieneś także wywołać funkcję poniżej;
$('.className').prop('checked','true')
Zwłaszcza po usunięciu atrybutu zaznaczonego pola wyboru.
// when the button (select_unit_button) is clicked it returns all the checed checkboxes values
$("#select_unit_button").on("click",function(e){var arr =[];
$(':checkbox:checked').each(function(i){
arr[i]= $(this).val();// u can get id or anything else});//console.log(arr); // u can test it using this in google chrome});
$("#mycheckbox").click();
Odpowiedzi:
Nowoczesne jQuery
Użyj
.prop()
:DOM API
Jeśli pracujesz tylko z jednym elementem, zawsze możesz uzyskać dostęp do instrumentu bazowego
HTMLInputElement
i zmodyfikować jego.checked
właściwość:Korzyścią z używania metod
.prop()
i.attr()
zamiast tego jest to, że będą działać na wszystkich dopasowanych elementach.jQuery 1.5.xi nowsze
Ta
.prop()
metoda nie jest dostępna, więc musisz jej użyć.attr()
.Zauważ, że jest to podejście stosowane w testach jednostkowych jQuery przed wersją 1.6 i jest lepsze niż użycie,
$('.myCheckbox').removeAttr('checked');
ponieważ ta ostatnia, jeśli pole zostało początkowo zaznaczone, zmieni zachowanie wywołania.reset()
w dowolnej formie, która go zawiera - subtelne, ale prawdopodobnie niepożądana zmiana zachowania.Aby uzyskać więcej informacji, niektóre niepełne omówienie zmian w obsłudze
checked
atrybutu / właściwości w przejściu z wersji 1.5.x na wersję 1.6 można znaleźć w informacjach o wersji 1.6 oraz w sekcji Dokumentacja kontra atrybuty ..prop()
źródło
DOMElement.checked = true
”. Byłoby to jednak nieistotne, ponieważ to tylko jeden element ...$(element).prop('checked')
jest kompletnym marnotrawstwem pisania.element.checked
istnieje i należy go używać w przypadkach, w których już maszelement
Posługiwać się:
A jeśli chcesz sprawdzić, czy pole wyboru jest zaznaczone, czy nie:
źródło
Jest to poprawny sposób sprawdzania i odznaczając pola wyboru z jQuery, jak to jest standard cross-platform, i będzie dopuszczać reposts formularza.
Robiąc to, używasz standardów JavaScript do zaznaczania i odznaczania pól wyboru, więc każda przeglądarka, która poprawnie implementuje właściwość „zaznaczone” elementu pola wyboru, uruchomi ten kod bezbłędnie. To powinno być wszystkich głównych przeglądarek, ale nie jestem w stanie przetestować poprzedni Internet Explorer 9.
Problem (jQuery 1.6):
Gdy użytkownik kliknie pole wyboru, to pole wyboru przestaje odpowiadać na zmiany atrybutu „zaznaczone”.
Oto przykład atrybutu checkbox, który nie wykonał zadania po tym, jak ktoś kliknął pole wyboru (dzieje się tak w Chrome).
Skrzypce
Rozwiązanie:
Korzystając z właściwości JavaScript „zaznaczonej” w elementach DOM , jesteśmy w stanie rozwiązać problem bezpośrednio, zamiast próbować zmanipulować DOM do robienia tego, co chcemy .
Skrzypce
Ta wtyczka zmieni właściwość zaznaczenia dowolnych elementów wybranych przez jQuery oraz pomyślnie zaznaczy i odznacz pola wyboru we wszystkich okolicznościach. Chociaż może się to wydawać nadmiernym obciążeniem, poprawi komfort korzystania z witryny i zapobiegnie frustracji użytkowników.
Alternatywnie, jeśli nie chcesz używać wtyczki, możesz użyć następujących fragmentów kodu:
źródło
removeAttr('checked')
zamiastattr('checked', false)
checked
zmiany atrybutów, niezależnie od metody ich zmiany.$('.myCheckBox').prop('checked', true)
W ten sposób automatycznie zastosuje się do całego zestawu dopasowanych elementów (tylko przy ustawianiu, uzyskanie jest wciąż tylko pierwszym)prop
jest zdecydowanie odpowiednim sposobem ustawiania atrybutów elementu.Możesz to zrobić
lub
Jeśli masz niestandardowy kod w zdarzeniu onclick dla pola wyboru, które chcesz uruchomić, użyj tego:
Możesz odznaczyć, usuwając całkowicie atrybut:
Możesz zaznaczyć wszystkie pola wyboru w ten sposób:
źródło
$(".myCheckbox").click()
.attr
zamiast.prop
.$("#mycheckbox").click();
pracował dla mnie, jak ja słuchałem i zmian razie zbyt.attr
i.prop
nie wydarzenie zmiana ogień.Możesz także rozszerzyć obiekt $ .fn o nowe metody:
Następnie możesz po prostu zrobić:
Możesz też nadać im więcej unikalnych nazw, takich jak mycheck () i myuncheck () na wypadek, gdybyś używał innej biblioteki, która używa tych nazw.
źródło
.attr
zamiast.prop
.Ostatni wywoła zdarzenie kliknięcia dla pola wyboru, pozostałe nie. Więc jeśli masz niestandardowy kod w zdarzeniu onclick dla pola wyboru, które chcesz uruchomić, użyj ostatniego.
źródło
.attr
zamiast.prop
.click
wydarzenie jest niewiarygodne w Firefox i Edge.Aby zaznaczyć pole wyboru, należy użyć
lub
i aby odznaczyć pole wyboru, zawsze należy ustawić na false:
Jeśli zrobisz
usuwa atrybut razem i dlatego nie będzie można zresetować formularza.
ZŁY DEMO jQuery 1.6 . Myślę, że to jest zepsute. Dla 1.6 zamierzam napisać o tym nowy post.
NOWA WERSJA DEMO jQuery 1.5.2 działa w Chrome.
Oba dema używają
źródło
$(".mycheckbox").prop("checked", true/false)
Wybiera elementy, które mają określony atrybut o wartości zawierającej podany podciąg „ckbItem”:
Wybiera wszystkie elementy, które zawierają atrybut ckbItem w swoim atrybucie nazwy.
źródło
Zakładając, że pytanie brzmi ...
Jak mogę zaznaczyć pole wyboru WEDŁUG WARTOŚCI?
Pamiętaj, że w typowym zestawie pól wyboru wszystkie znaczniki wejściowe mają tę samą nazwę, różnią się atrybutem
value
: dla każdego wejścia zestawu nie ma identyfikatora.Odpowiedź Xiana można rozszerzyć za pomocą bardziej szczegółowego selektora , używając następującego wiersza kodu:
źródło
Brakuje mi rozwiązania. Zawsze będę używać:
źródło
.val()
który zawsze powróciundefined
po wywołaniu 0 elementów w celu wykrycia, że obiekt jQuery jest pusty, kiedy możesz po prostu sprawdź.length
zamiast tego) - więcej informacji można znaleźć na stackoverflow.com/questions/901712/ ...Aby zaznaczyć pole wyboru przy użyciu jQuery 1.6 lub wyższej, po prostu wykonaj następujące czynności:
Aby odznaczyć, użyj:
Oto, co lubię używać do przełączania pola wyboru za pomocą jQuery:
Jeśli używasz jQuery 1.5 lub nowszej:
Aby odznaczyć, użyj:
źródło
Oto sposób na zrobienie tego bez jQuery
źródło
Oto kod zaznaczony i niezaznaczony za pomocą przycisku:
Aktualizacja: Oto ten sam blok kodu przy użyciu nowszej metody prop Jquery 1.6+, która zastępuje attr:
źródło
.attr
zamiast.prop
.Spróbuj tego:
źródło
Możemy użyć
elementObject
z jQuery do sprawdzenia atrybutu:Możemy użyć tego dla wszystkich wersji jQuery bez żadnego błędu.
Aktualizacja: Jquery 1.6+ ma nową metodę prop, która zastępuje attr, np .:
źródło
.attr
zamiast.prop
.Jeśli używasz PhoneGap do tworzenia aplikacji i masz wartość przycisku, którą chcesz natychmiast pokazać, pamiętaj, aby to zrobić
Odkryłem, że bez zakresu interfejs nie aktualizuje się bez względu na to, co robisz.
źródło
Oto kod i wersja demonstracyjna sprawdzania wielu pól wyboru ...
http://jsfiddle.net/tamilmani/z8TTt/
źródło
$("#check")
z surowymi wywołaniami DOM API jakdocument.getElementsByTagName("input")
wydaje mi się nieeleganckie, szczególnie biorąc pod uwagę, żefor
można tutaj uniknąć pętli.prop()
. Niezależnie od tego jest to kolejna późna odpowiedź, która nie dodaje nic nowego.Inne możliwe rozwiązanie:
źródło
Jak powiedział @ livefree75:
jQuery 1.5.xi nowsze
Możesz także rozszerzyć obiekt $ .fn o nowe metody:
Ale w nowych wersjach jQuery musimy użyć czegoś takiego:
jQuery 1.6+
Następnie możesz po prostu zrobić:
źródło
Jeśli używasz telefonu komórkowego i chcesz, aby interfejs się zaktualizował i wyświetlał pole wyboru jako niezaznaczone, użyj następujących poleceń:
źródło
Uważaj na wycieki pamięci w Internet Explorerze wcześniejszym niż Internet Explorer 9 , ponieważ dokumentacja jQuery mówi :
źródło
.prop('checked',true)
.Dla jQuery 1.6+
Dla jQuery 1.5.xi niższych
Sprawdzić,
źródło
Aby zaznaczyć i odznaczyć
źródło
źródło
Jest to prawdopodobnie najkrótsze i najłatwiejsze rozwiązanie:
lub
Jeszcze krótszy byłby:
Oto także jsFiddle .
źródło
Zwykły JavaScript jest bardzo prosty i znacznie mniejszy:
Przykład tutaj
źródło
Nie mogłem go uruchomić przy użyciu:
Zarówno prawda, jak i fałsz zaznaczałyby pole wyboru. Dla mnie zadziałało:
źródło
true
ifalse
nie'true'
a'false'
?'false'
zostało przekonwertowane na wartość boolowską, co spowodowało, żetrue
- pusty łańcuch ocenia,false
więc „działał”. Zobacz to skrzypce na przykład, co mam na myśli.Po zaznaczeniu pola wyboru, takiego jak;
to może nie wystarczyć. Powinieneś także wywołać funkcję poniżej;
Zwłaszcza po usunięciu atrybutu zaznaczonego pola wyboru.
źródło
Oto pełna odpowiedź przy użyciu jQuery
Testuję to i działa w 100%: D
źródło
W jQuery
lub
W JavaScript
źródło
.attr
zamiast.prop
.