Перевірте перемикач за допомогою JavaScript


95

З якихось причин я не можу зрозуміти це.

У моєму 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;

Але це, схоже, не оновлюється. Він потрібен для видимого оновлення, щоб користувач міг це побачити. Хто-небудь може допомогти?

EDIT: Я просто втомився і пропустив #, дякую, що вказав на це, що і $.prop().


Перевірте цей StackOverflow питання: [Як перевірити радіокнопку з JQuery] [1] [1]: stackoverflow.com/questions/5665915 / ...
— Менді Шоеп

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

1
@stackErr without the#
— Tim Seguine

Вибачте, просто неправильна копія-вставка. Оновлено зараз. @FelipeKM Тоді, будь ласка, допоможіть мені, я не знайшов такого, що допомагає.
— ptf

@kjelelokk перевірити мій коментар або відповідь
— Pointys

Відповіді:


151

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

Власне рішення JS:

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

Рішення JQuery:

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


1
Технічно це синтаксис селектора CSS. jQuery щойно запозичив і продовжив його
— Тім Сегін

jQuery отримав це, querySelectorя б уявив.
— Енді,

набагато краще, ніж.attr("checked", "checked")
— ma77c

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

це встановлює прапорець, але не обов'язково викликає пов'язану подію. яка подія спрацьовує, коли користувач натискає перемикач?
— robisrob

16

Якщо ви хочете встановити кнопку "1234", вам потрібно використовувати її "id":

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

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


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

@NadeemGorsi атрибут "id" не може бути спільним для більш ніж одного елемента. Усі значення "id" мають бути унікальними на даній сторінці.
— Пойнті

9

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

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

3
Гаразд, але як я можу отримати зворотний ефект або перевірити радіо на основі вартості .. і ось про яке питання йшлося насправді.
— Ndm Gjr,

1
@NadeemGorsi Я дав відповідь на вибір або "перевірку" перемикача за допомогою QuerySelector
— kevinf

6

Найпростіший спосіб, мабуть, був би за допомогою jQuery наступним чином:

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

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

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

Або просто$("#_1234").prop("checked", true)
— невизначений

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.