Как сбросить радиокнопки в jQuery, чтобы ни один не проверялся - PullRequest
129 голосов
/ 10 июня 2009

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

Ответы [ 13 ]

256 голосов
/ 10 июня 2009

В версиях 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 и устанавливаете свойство selected, 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 .

52 голосов
/ 16 сентября 2010

Лучший способ установить состояние радиокнопок в 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 голосов
/ 10 июня 2009

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

Попробуйте это:

$('input[name="correctAnswer"]').attr('checked', false);
4 голосов
/ 30 сентября 2011

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

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.

4 голосов
/ 20 апреля 2011
$('#radio1').removeAttr('checked');
$('#radio2').removeAttr('checked');
$('#radio3').removeAttr('checked');
$('#radio4').removeAttr('checked');

Or

$('input[name="correctAnswer"]').removeAttr('checked');
2 голосов
/ 29 апреля 2016

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

$("#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 голосов
/ 31 января 2019

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

$('input[name="correctAnswer"]').prop('checked', false).change();
0 голосов
/ 20 сентября 2013
<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 голосов
/ 13 августа 2013

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

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

0 голосов
/ 04 июля 2013

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

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