Як скинути радіо кнопки в jQuery, щоб ніхто не перевірявся


136

У мене є перемикачі в HTML так:

<td>
    <input id="radio1" type="radio" name="correctAnswer" value="1">1</input>
    <input id="radio2" type="radio" name="correctAnswer" value="2">2</input>
    <input id="radio3" type="radio" name="correctAnswer" value="3">3</input>
    <input id="radio4" type="radio" name="correctAnswer" value="4">4</input>
</td>

Це у тезі форми, і коли користувач подає форму, я хочу повернути всі перемикачі до стандартних. Значить, ніхто з них не перевірявся.

У мене є цей код, але він дає помилку [0] is null or not an object

$('input[@name="correctAnswer"]')[0].checked = false;
$('input[@name="correctAnswer"]')[1].checked = false;
$('input[@name="correctAnswer"]')[2].checked = false;
$('input[@name="correctAnswer"]')[3].checked = false;

Я роблю це в IE 6.


Якщо відповідь @ lambacck не працює, ви побачите помилку на веб-сайті JQuery [ bugs.jquery.com/ticket/10910] . Якщо ви (як я був ...) пробираєтеся через набір радіо кнопок, щоб спробувати скинути їх до значень за замовчуванням, #(selector).prop('checked',true);не вдасться, якщо це супроводжувалося спробою встановити наступний перемикач у тій самій групі на неперевірений стан. Трюк - лише встановити перемикач на перевірений стан і дозволити групі перемикачів робити те, що робить (зніміть прапорці для інших ...) . Крім того, виклик $(selector).click();робіт і запустить будь-які пов’язані події.
Cos Callis

Відповіді:


270

У версіях jQuery до 1.6 використовувати:

$('input[name="correctAnswer"]').attr('checked', false);

У версіях jQuery після 1.6 слід використовувати:

$('input[name="correctAnswer"]').prop('checked', false);

але якщо ви використовуєте 1.6.1+, ви можете скористатися першою формою (див. примітку 2 нижче).

Примітка 1: важливо, щоб другий аргумент був помилковим, а не "хибним", оскільки "false" не є хибним значенням. тобто

if ("false") {
    alert("Truthy value. You will see an alert");
}

Примітка 2: Станом на jQuery 1.6.0, зараз існує два подібних методу, .attrі вони .propроблять два пов'язані, але трохи різні речі. Якщо в цьому конкретному випадку наведена вище порада працює, якщо ви використовуєте 1.6.1+. Вищезгадане не працює з 1.6.0, якщо ви використовуєте 1.6.0, вам слід оновити. Якщо ви хочете деталі, продовжуйте читати.

Подробиці: При роботі з прямими елементами HTML DOM, є властивості , прикріплені до DOM елементу ( checked, type, value, і т.д.) , які забезпечують інтерфейс з керуванням станом сторінки HTML. Існує також .getAttribute/ .setAttributeінтерфейс, який забезпечує доступ до значень атрибутів HTML, як це передбачено в HTML. Перед 1.6 jQuery розмиває відмінність, надаючи один метод .attr, для доступу до обох типів значень. jQuery 1.6+ пропонує два способи .attrта .propрозрізняти ці ситуації.

.propдозволяє встановити властивість для елемента DOM, в той час як .attrдозволяє встановити значення атрибута HTML. Якщо ви працюєте з простим DOM і встановити перевіряється майно, elem.checkedдо trueабо falseзмінити йде значення (то , що бачить користувач) і значення , повернуті відстежує стан на стор. elem.getAttribute('checked')однак повертає лише початковий стан (і повертає 'checked'або undefinedзалежно від початкового стану від HTML). У 1.6.1+ використання використовує .attr('checked', false)і те, elem.removeAttribute('checked')і інше, elem.checked = falseоскільки зміна спричинила багато проблем із сумісністю назад, і він не може насправді визначити, чи хотіли ви встановити атрибут HTML або властивість DOM. Додаткову інформацію див. У документації для .prop .


Для другого аргументу важливо передати помилковий, а не "хибний".
Casebash

"Неправдивий" для другого аргументу важливий, оскільки другий аргумент - це значення, яке потрібно встановити. Якщо другий аргумент порожній, це означає дати мені значення першого елемента, що відповідає селектору.
lambacck

1
@Noldorin - "Truthy" - це ідеально кромулентне слово. (Чи можете ви запропонувати кращий спосіб виразити поняття "truthy" - використовуючи лише одне слово?)
nnnnnn

Хе, досить справедливо. Ми всі, мабуть, розуміємо, хоча я особисто віддав перевагу навіть формальнішим "правдивим" або "семантично правдивим".
Нолдорін

3
@Noldorin "Truthy" і "Falsy" - це терміни, якими користуються багато експертів Javascript, включаючи Брендана Ейха та Дугласа Крокфорда . Ключовим терміном є хибність, оскільки булеві оцінки визначаються шістьма хибними значеннями . Truthy - логічна назва протилежної фальшивості. Я думаю, що використання фальшивки було навмисно використане, щоб змусити вас думати, що це може бути не те, до чого ви звикли (esp, якщо ви прийшли з інших мов синтаксису стилю C, де 0 неправдиво).
ламбак

53

Найкращий спосіб встановити стан радіо кнопок у jquery:

HTML:

<input type="radio" name="color" value="orange" /> Orange 
<input type="radio" name="color" value="pink" /> Pink 
<input type="radio" name="color" value="black" /> Black
<input type="radio" name="color" value="pinkish purple" /> Pinkish Purple

Код Jquery (1.4+) для попереднього вибору однієї кнопки:

var presetValue = "black";
$("[name=color]").filter("[value='"+presetValue+"']").attr("checked","checked");

У коді Jquery 1.6+ переважніший метод .prop ():

var presetValue = "black";
$("[name=color]").filter("[value='"+presetValue+"']").prop("checked",true);

Щоб зняти виділення кнопок:

$("[name=color]").removeAttr("checked");

10

Ваша проблема полягає в тому, що селектор атрибутів не починається з @.

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

$('input[name="correctAnswer"]').attr('checked', false);

4
$('#radio1').removeAttr('checked');
$('#radio2').removeAttr('checked');
$('#radio3').removeAttr('checked');
$('#radio4').removeAttr('checked');

Or

$('input[name="correctAnswer"]').removeAttr('checked');

4

Нарешті, після багатьох тестів, я вважаю, що найзручнішим та найефективнішим способом встановлення є:

var presetValue = "black";
$("input[name=correctAnswer]").filter("[value=" + presetValue + "]").prop("checked",true);
$("input[name=correctAnswer]").button( "refresh" );//JQuery UI only

Оновлення потрібно для об'єкта JQueryUI.

Отримати значення легко:

alert($('input[name=correctAnswer]:checked').val())

Тестований з JQuery 1.6.1, JQuery UI 1.8.


2

Я знаю, що це давнє і що це трохи поза темою, але припустимо, що ви хотіли зняти прапорці лише з певних радіо кнопок у колекції:

$("#go").click(function(){
    $("input[name='correctAnswer']").each(function(){
      if($(this).val() !== "1"){
        $(this).prop("checked",false);
      }
    });
  });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input id="radio1" type="radio" name="correctAnswer" value="1">1</input>
<input id="radio2" type="radio" name="correctAnswer" value="2">2</input>
<input id="radio3" type="radio" name="correctAnswer" value="3">3</input>
<input id="radio4" type="radio" name="correctAnswer" value="4">4</input>
<input type="button" id="go" value="go">

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

$("#go").click(function(){
  $("input[name='correctAnswer']:checked").prop("checked",false);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input id="radio1" type="radio" name="correctAnswer" value="1">1</input>
<input id="radio2" type="radio" name="correctAnswer" value="2">2</input>
<input id="radio3" type="radio" name="correctAnswer" value="3">3</input>
<input id="radio4" type="radio" name="correctAnswer" value="4">4</input>
<input type="button" id="go" value="go">

0

Набір радіо кнопок перевірено через jquery:

<div id="somediv" >
 <input type="radio" name="enddate" value="1"  />
 <input type="radio" name="enddate" value="2"  />
 <input type="radio" name="enddate" value="3"  />
</div>

код jquery:

$('div#somediv input:radio:nth(0)').attr("checked","checked");

0

Якщо потрібно очистити всі перемикачі в DOM:

$('input[type=radio]').prop('checked',false);


0
<div id="radio">
<input type="radio" id="radio1" name="radio"/><label for="radio1">Bar Chart</label>
<input type="radio" id="radio2" name="radio"/><label for="radio2">Pie Chart</label>
<input type="radio" id="radio3" name="radio"/><label for="radio3">Datapoint Chart</label>
</div>

$('#radio input').removeAttr('checked');
// Refresh the jQuery UI buttonset.                  
$( "#radio" ).buttonset('refresh');

0

Хоча опора змінила перевірений статус, але зміни також показують, що у формі.

$('input[name="correctAnswer"]').prop('checked', false).change();

-1

Де у вас є: <input type="radio" name="enddate" value="1" />

Після значення = "1" ви також можете просто додати unchecked =" false" />

Лінія буде:

<input type="radio" name="enddate" value="1" unchecked =" false" />

1
Гей, я думаю, ти залишив свою відповідь неповною.
Амар

-2

Повернення всіх перемикачів назад до стандартних:

$("input[name='correctAnswer']").checkboxradio( "refresh" );

Функція checkboxradio () не визначена в jQuery 2.x. Це розширення, яке ви використовували?
justdan23

-3

Чому б не зробити:

$("#radio1, #radio2, #radio3, #radio4").checked = false;

1
Ви не можете просто встановити зареєстровану властивість масиву, повернутого після виклику jQuery, вам потрібно скористатися функцією attr (), щоб встановити це властивість для елементів у масиві.
бдукс

це не робить , то «безконтрольно»
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.