Установите переключатель с помощью 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.