Sprawdź przycisk radiowy za pomocą javascript


98

Z jakiegoś powodu nie mogę tego rozgryźć.

Mam kilka przycisków opcji w moim html, które przełączają kategorie:

<input type="radio" name="main-categories" id="_1234" value="1234" /> // All
<input type="radio" name="main-categories" id="_2345" value="2345" /> // Certain category
<input type="radio" name="main-categories" id="_3456" value="3456" /> // Certain category
<input type="radio" name="main-categories" id="_4567" value="4567" /> // Certain category

Użytkownik może wybrać, co chce, ale gdy wyzwala określone zdarzenie, chcę ustawić 1234przycisk opcji jako zaznaczony, ponieważ jest to domyślnie zaznaczony przycisk opcji.

Wypróbowałem wersje tego (z jQuery i bez):

document.getElementById('#_1234').checked = true;

Ale wydaje się, że nie aktualizuje się. Potrzebuję widocznej aktualizacji, aby użytkownik mógł to zobaczyć. Czy ktoś może pomóc?

EDYCJA: Jestem po prostu zmęczony i przeoczyłem #, dziękuję za wskazanie tego, i $.prop().


Sprawdź to pytanie dotyczące StackOverflow: [Jak sprawdzić przycisk radiowy za pomocą jQuery] [1] [1]: stackoverflow.com/questions/5665915/…
— Mandy Schoep

8
zmień nadocument.getElementById('_1234').checked = true;
— stackErr

1
@stackErr without the#
— Tim Seguine

Przepraszamy, po prostu zła kopiuj-wklej. Zaktualizowano teraz. @FelipeKM W takim razie pomóż mi, nie znalazłem takiego, który pomaga.
— ptf

@kjelelokk sprawdź mój komentarz lub odpowiedź
— Pointys

Odpowiedzi:


159

Nie mieszaj składni CSS / JQuery ( #dla identyfikatora) z natywnym JS.

Natywne rozwiązanie JS:

document.getElementById("_1234").checked = true;

Rozwiązanie JQuery:

$("#_1234").prop("checked", true);


1
Technicznie jest to składnia selektora CSS. jQuery właśnie go pożyczył i przedłużył
— Tim Seguine

querySelectorWyobrażam sobie, że jQuery to wziął .
— Andy

znacznie lepiej niż.attr("checked", "checked")
— ma77c

@Andy - Sizzle był używany w jQuery od początku 2006 roku. ( en.wikipedia.org/wiki/JQuery#History ). querySelectornie był dostarczany w przeglądarkach do 2009 roku i dopiero jakiś czas później nie był powszechnie używany przez programistów. Nigdy nie używałem tak często jQuery, ale znacząco wpłynęło to na ewolucję JS.
— Rounin

powoduje to ustawienie pola wyboru, ale niekoniecznie wywołuje skojarzone zdarzenie. jakie zdarzenie jest wywoływane, gdy użytkownik kliknie przycisk opcji?
— robisrob

17

Jeśli chcesz ustawić przycisk „1234”, musisz użyć jego „id”:

document.getElementById("_1234").checked = true;

Kiedy używasz interfejsu API przeglądarki („getElementById”), nie używasz składni selektora; po prostu przekazujesz rzeczywistą wartość „id”, której szukasz. Używasz składni selektora z jQuery lub .querySelector()i .querySelectorAll().


każdy otrzymuje element według identyfikatora. Mam więcej niż jeden przycisk opcji o tej samej nazwie. i myślę, że właśnie tego większość ludzi potrzebuje, aby wybrać grupę radiotelefonów według nazwy, a następnie w oparciu o sprawdzenie wartości jednego z nich.
— Ndm Gjr

@NadeemGorsi atrybut „id” nie może być współużytkowany przez więcej niż jeden element. Wszystkie wartości „id” muszą być unikalne na danej stronie.
— Pointy

9

Dziś, w roku 2016, można go używać document.querySelectorbez znajomości identyfikatora (zwłaszcza jeśli masz więcej niż 2 przyciski opcji):

document.querySelector("input[name=main-categories]:checked").value

3
OK, ale jak mogę uzyskać efekt odwrotny lub sprawdzić radio na podstawie wartości .. i o to właściwie chodziło.
— Ndm Gjr

1
@NadeemGorsi Podałem odpowiedź, aby wybrać lub „sprawdzić” przycisk opcji za pomocą QuerySelector
— kevinf

6

Najłatwiejszym sposobem byłoby prawdopodobnie użycie jQuery w następujący sposób:

$(document).ready(function(){
  $("#_1234").attr("checked","checked");
})

To dodaje nowy atrybut „zaznaczone” (który w HTML nie potrzebuje wartości). Pamiętaj tylko o dołączeniu biblioteki jQuery:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

Lub po prostu$("#_1234").prop("checked", true)
— niezdefiniowane

3

Używając document.getElementById()funkcji nie musisz podawać #przed id elementu.

Kod:

document.getElementById('_1234').checked = true;

Demo: JSFiddle


3

Udało mi się wybrać (sprawdzić) przycisk wprowadzania opcji za pomocą tego kodu JavaScript w przeglądarce Firefox 72, na stronie opcji rozszerzenia sieci Web, aby załadować wartość:

var reloadItem = browser.storage.sync.get('reload_mode');
reloadItem.then((response) => {
    if (response["reload_mode"] == "Periodic") {
        document.querySelector('input[name=reload_mode][value="Periodic"]').click();
    } else if (response["reload_mode"] == "Page Bottom") {
        document.querySelector('input[name=reload_mode][value="Page Bottom"]').click();
    } else {
        document.querySelector('input[name=reload_mode][value="Both"]').click();
    }
});

Gdzie powiązany kod do ZAPISANIA wartość to:

reload_mode: document.querySelector('input[name=reload_mode]:checked').value

Biorąc pod uwagę HTML, jak poniżej:

    <input type="radio" id="periodic" name="reload_mode" value="Periodic">
    <label for="periodic">Periodic</label><br>
    <input type="radio" id="bottom" name="reload_mode" value="Page Bottom">
    <label for="bottom">Page Bottom</label><br>
    <input type="radio" id="both" name="reload_mode" value="Both">
    <label for="both">Both</label></br></br>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.