jQuery встановити перемикач


134

Я намагаюся встановити перемикач. Я хочу встановити його, використовуючи значення або id.

Це те, що я спробував.

$('input:radio[name=cols]'+" #"+newcol).attr('checked',true);

newcol - ідентифікатор перемикача.

Можливо, трохи редагування в порядку.

Є два набори радіотехнічних коробок, один - з візками, а другий - рядками. Тому я бачу сенс у тому, щоб не використовувати ідентифікатори. Моє ліжко. Отже, я маю як приклад:

<input type="radio" name="rows" class="listOfCols" 
   style="width: 50%; " value="Site"></input>

і

<input type="radio" name="cols" class="listOfCols" 
   style="width: 50%; "  value="Site"></input>

з ідентифікатором видалено, і мені потрібно встановити правильний.


Відповіді:


196

Ваш селектор шукає нащадка input:radio[name=cols]елемента, який має ідентифікатор newcol(ну і значення цієї змінної).

Спробуйте це замість цього (оскільки ви все одно вибрали ідентифікатор):

$('#' + newcol).prop('checked',true);

Ось демонстрація: http://jsfiddle.net/jasper/n8CdM/1/

Також, для jQuery 1.6, переліченим способом зміни властивості є .prop(): http://api.jquery.com/prop


5
+1 для propпроти attr. attrзастаріла для властивостей і більше не працює в jQuery 2.0))
gavenkoa

87

Відповідь я знайшов тут:
https://web.archive.org/web/20160421163524/http://vijayt.com/Post/Set-RadioButton-value-using-jQuery

В основному, якщо ви хочете перевірити одну перемикач, ОБОВ'ЯЗКОВО передати значення як масив:

$('input:radio[name=cols]').val(['Site']);
$('input:radio[name=rows]').val(['Site']);

Привіт, що у посиланні немає запропонованого вмісту. Чому ви, хлопці, постійно відхиляєте мою редакцію, щоб видалити посилання. Він не містить нічого щодо цього питання.
Менюка Ішан

@ MenukaIshan, справа в тому: дайте кредит. Посилання доступне на web.archive.org, і хлопець, який написав це вперше, і від кого я отримав ідею відповіді, повинен отримати його кредит. Не видаляйте посилання, і якщо ви хочете побачити оригінальну публікацію, скопіюйте та вставте посилання (я не знаю, чому це переходить на стару сторінку замість web.archive.org)
Chococroc

2
@Chococroc Ви неправильно налаштували відмітку питання. Я побачив версію веб-архіву та правильно пов’язав її. Після огляду він буде правильно посилатися на сайт.
Menuka Ishan

2
Здається, це має бути прийнятою відповіддю, оскільки це рішення, згадане в документах jQuery
plong0

15

Здається, у вашому селекторі ви намагаєтесь отримати якийсь вкладений елемент вашої радіо-кнопки із заданим ідентифікатором. Якщо ви хочете перевірити перемикач, слід вибрати цей перемикач у селекторі, а не щось інше:

$('input:radio[name="cols"]').attr('checked', 'checked');

Це передбачає, що у вашій розмітці є наступний перемикач:

<input type="radio" name="cols" value="1" />

Якщо у вашій радіо-кнопці був ідентифікатор:

<input type="radio" name="cols" value="1" id="myradio" />

Ви можете безпосередньо використовувати перемикач ідентифікаторів:

$('#myradio').attr('checked', 'checked');

Якщо є кілька радіостанцій з colsназвою, тоді $('input:radio[name="cols"]').attr('checked', 'checked');виберемо лише останнє. Він буде запускати код на кожному, але щоразу, коли ви встановлюєте checkedвластивість, раніше встановлений елемент не змінюється. Ось демонстрація: jsfiddle.net/jasper/n8CdM/2
Джаспер

@Jasper, так, це правда. Ось чому я запропонував використовувати перемикач ідентифікаторів.
Дарин Димитров

12

Ви можете спробувати наступний код:

$("input[name=cols][value=" + value + "]").attr('checked', 'checked');

Це встановить атрибут, перевірений для колонок радіо, та значення, як зазначено.


1
...the most important concept to remember about the checked attribute is that it does not correspond to the checked property.Джерело: api.jquery.com/attr
Джаспер

10

Навіщо вам це потрібно 'input:radio[name=cols]'. Не знаєте ваш html, але припускаючи, що ідентифікатори унікальні, ви можете просто зробити це.

$('#'+newcol).prop('checked', true);

6

Спробуйте це:

$("#" + newcol).attr("checked", "checked");

У мене виникли проблеми attr("checked", true), тому я, як правило, використовую вище сказане.

Крім того, якщо у вас є ідентифікатор, вам не потрібні інші речі для вибору. Ідентифікатор унікальний.


1
Підтримка краща за attr для таких речей
RozzA

attr вже немає в jQuery 1.9+.
Mike_Laird

Ви маєте рацію, але в кінцевому рахунку це залежить від вашої конкретної ситуації. Якщо ваш код завжди буде працювати з jQuery 1.6 або новішою версією, то шлях - це шлях. Але якщо ваш код працює на старих версіях, то рішення не настільки просто. Наприклад, я підтримую плагін jQuery PickList, і ми підтримуємо jQuery 1.4+, тому просто використовувати опору - це не варіант. Це відкритий квиток, тому якщо у вас є якісь витончені пропозиції, я хотів би їх почути; Я просто ще не встиг зробити дослідження.
Ведмедик Овеня

Проблема полягає в тому, що навіть якщо ваше рішення може бути більш сумісним назад, воно просто не працює в цьому випадку: Виберіть "А", він отримає новий checked="checked"атрибут, а браузер покаже його як перевірений, потім виберіть "В", і те ж станеться. Тепер, коли ви виберете A знову, він вже матиме checked="checked"атрибут і нічого не зміниться. Як побічний ефект цього B все одно буде обраний, а не А.
Kyborek

2

Оскільки newcolє ідентифікатором перемикача, Ви можете просто використовувати його, як показано нижче.

$("#"+newcol).attr('checked',true);

2

Використання .filter()також працює і є гнучким для id, value, name:

$('input[name="cols"]').filter("[value='Site']").attr('checked', true);

(бачимо в цьому блозі )


1
Я вважаю, що це однаково достовірна відповідь, але він повинен використовувати метод prop (): $ ('input [name = "cols"]'). Filter ("[value = 'Site']"). Prop ('перевірено ', правда);. Користувач хоче встановити "value or id". Можливо, трапляються випадки, коли ви не хочете встановлювати значення id для кожної радіо-опції, тому корисне отримання імені та фільтрація за значенням.
Зак Імбоден



0

Обрана відповідь спрацьовує в цьому випадку.

Але питання полягало у пошуку елемента на основі радіогрупи та динамічного ідентифікатора, і відповідь також може залишити відображувану радіо-кнопку без змін.

Цей рядок вибирає саме те, про що вимагали, показуючи також зміни на екрані.

$('input:radio[name=cols][id='+ newcol +']').click();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.