Как reset радиообъекты в jQuery, чтобы ни один не был проверен

У меня есть радиокнопки в формате 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.

Ответ 1

В версиях jQuery до версии 1.6 используйте:

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

В версиях jQuery после 1.6 вы должны использовать:

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

но если вы используете 1.6.1+, вы можете использовать первую форму (см. примечание 2 ниже).

Примечание 1: важно, чтобы второй аргумент был false, а не "false" , поскольку "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 и устанавливаете свойство checked, 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.

Ответ 2

Лучший способ установить состояние радиообъектов в 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");

Ответ 3

Ваша проблема в том, что селектор атрибутов не начинается с @.

Попробуйте следующее:

$('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');

Ответ 5

Наконец, после множества тестов, я считаю, что наиболее удобный и эффективный способ настройки:

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.

Ответ 6

Я знаю, что это старое и что это немного не по теме, но предположим, что вы хотите снять флажки только с определенными переключателями в коллекции:

$("#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">

Ответ 7

Установлен переключатель радиостанций через 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");

Ответ 8

Если вы хотите очистить все радиокнопки в DOM:

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

Ответ 9

<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');

Ответ 10

Хотя prop изменил проверенный статус, но изменения также показывают, что в форме.

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

Ответ 11

Где у вас есть: <input type="radio" name="enddate" value="1" />

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

Тогда строка будет следующей:

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

Ответ 12

Установите все переключатели по умолчанию:

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

Ответ 13

Почему бы вам не сделать:

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