Установите переключатель с помощью javascript


98

По какой-то причине я не могу этого понять.

У меня есть несколько переключателей в моем html, которые переключают категории:

<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

Пользователь может выбрать то, что он / она хочет, но когда срабатывает определенное событие, я хочу установить переключатель 1234с установленным флажком, потому что это установленный по умолчанию переключатель.

Я пробовал версии этого (с jQuery и без):

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

Но вроде не обновляется. Мне нужно, чтобы он явно обновлялся, чтобы пользователь мог его видеть. Кто-нибудь может помочь?

РЕДАКТИРОВАТЬ: Я просто устал и упустил из виду #, спасибо, что указали на это, и $.prop().


Отметьте этот вопрос StackOverflow: [Как проверить переключатель с помощью jQuery] [1] [1]: stackoverflow.com/questions/5665915/…
Мэнди Шоп

8
изменить наdocument.getElementById('_1234').checked = true;
stackErr

1
@stackErr без#
Тим Сегин

Извините, просто неправильный копипаст. Обновлено сейчас. @FelipeKM Тогда, пожалуйста, помогите мне, я не нашел ни одного, что поможет.
ptf

@kjelelokk проверьте мой комментарий или ответ
Pointys

Ответы:


159

Не смешивайте синтаксис CSS / JQuery ( #для идентификатора) с собственным JS.

Собственное решение JS:

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

Решение JQuery:

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


1
Технически это синтаксис селектора CSS. jQuery просто заимствовал и расширил его
Тим Сегин

querySelectorЯ полагаю, jQuery получил это от .
Энди

намного лучше чем.attr("checked", "checked")
ma77c

@Andy - Sizzle использовался в jQuery с начала 2006 года. ( en.wikipedia.org/wiki/JQuery#History ). querySelectorне поставлялась в браузерах до 2009 года и не использовалась разработчиками широко до некоторого времени после этого. Я никогда так часто не использовал jQuery, но он значительно повлиял на эволюцию JS.
Rounin

это устанавливает флажок, но не обязательно запускает связанное событие. какое событие запускается, когда пользователь нажимает переключатель?
robisrob

17

Если вы хотите установить кнопку «1234», вам нужно использовать ее «id»:

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

Когда вы используете API браузера ("getElementById"), вы не используете синтаксис селектора; вы просто передаете фактическое значение id, которое ищете. Вы используете синтаксис селектора с jQuery или .querySelector()и .querySelectorAll().


все получают элемент по идентификатору. У меня есть несколько переключателей с одинаковым именем. и я думаю, что это то, что нужно большинству людей, чтобы выбрать группу радиостанций по имени, а затем на основе стоимости проверить одно из них.
Ndm Gjr

@NadeemGorsi атрибут "id" не может использоваться более чем одним элементом. Все значения "id" должны быть уникальными на данной странице.
Pointy

10

Сегодня, в 2016 году, его можно использовать document.querySelectorбез знания идентификатора (особенно, если у вас более двух переключателей):

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

3
Хорошо, но как я могу получить обратный эффект или проверить радио по значению ... и вот о чем, собственно, был вопрос.
Ndm Gjr

1
@NadeemGorsi Я дал ответ, чтобы выбрать или "отметить" переключатель с помощью QuerySelector
kevinf

6

Самый простой способ, вероятно, был бы с jQuery, а именно:

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

Это добавляет новый атрибут "checked" (который в HTML не требует значения). Просто не забудьте включить библиотеку jQuery:

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

Или просто$("#_1234").prop("checked", true)
undefined

3

Используя document.getElementById()функцию, вам не нужно проходить #перед идентификатором элемента.

Код:

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

Демо: JSFiddle


3

Я смог выбрать (проверить) кнопку радио ввода, используя этот код Javascript в Firefox 72 на странице параметров веб-расширения, чтобы ЗАГРУЗИТЬ значение:

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();
    }
});

Где связанный код для СОХРАНИТЬ, значение было:

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

Данный HTML выглядит следующим образом:

    <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>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.