Jak zresetować radiobuttony w jQuery tak aby nie było zaznaczone

Mam przyciski radiowe w HTML tak:

<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>

Jest to znacznik formularza, a gdy użytkownik przesyła formularz, chcę, aby wszystkie przyciski radiowe wróciły do wartości domyślnej. To znaczy, że nikt nie sprawdził.

Mam ten kod ale daje błąd mówiąc [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;
Robię to w IE 6.
Author: Eric Leschinski, 2009-06-10

12 answers

W wersjach jQuery przed 1.6 użyj:

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

W wersjach jQuery po 1.6 należy użyć:

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

Ale jeśli używasz 1.6.1+ możesz użyć pierwszego formularza(patrz uwaga 2 poniżej).

Uwaga 1: Ważne jest, aby drugi argument był false , a nie "false" ponieważ "false" nie jest wartością falsy. tj.

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

Uwaga 2: od wersji jQuery 1.6.0 istnieją teraz dwie podobne metody, .attr i .prop to robi dwie powiązane, ale nieco różne rzeczy. Jeśli w tym konkretnym przypadku powyższa porada działa, jeśli używasz wersji 1.6.1+. Powyższe nie będzie działać z 1.6.0, jeśli używasz 1.6.0, powinieneś uaktualnić. Jeśli chcesz poznać szczegóły, Czytaj dalej.

Szczegóły: podczas pracy z prostymi elementami HTML DOM, do elementu DOM są dołączone właściwości (checked, type, value, etc), które zapewniają interfejs do stanu uruchomionej strony HTML. Jest też .getAttribute/.setAttribute interfejs, który zapewnia dostęp do wartości atrybutów HTML, jak podano w HTML. Przed 1.6 jQuery zatarło rozróżnienie, dostarczając jedną metodę, .attr, aby uzyskać dostęp do obu typów wartości. jQuery 1.6 + dostarcza dwie metody, .attr i .prop, aby odróżnić te sytuacje.

.prop pozwala ustawić właściwość elementu DOM, podczas gdy .attr pozwala ustawić wartość atrybutu HTML. Jeśli pracujesz z plain DOM i ustaw właściwość checked, elem.checked, na true lub false zmieniasz wartość bieżącą (to, co widzi użytkownik), a zwrócona wartość śledzi stan na stronie. elem.getAttribute('checked') zwraca jednak tylko stan początkowy(i zwraca 'checked' lub undefined w zależności od stanu początkowego z HTML). W 1.6.1 + użycie .attr('checked', false) robi zarówno elem.removeAttribute('checked'), jak i elem.checked = false, ponieważ zmiana spowodowała wiele problemów ze wsteczną kompatybilnością i nie można powiedzieć, czy chcesz ustawić atrybut HTML, czy właściwość DOM. Więcej informacji można znaleźć w dokumentacji dla .prop .

 247
Author: lambacck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-11 16:40:30

Najlepszy sposób na ustawienie stanu radiobuttonów w 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+) kod do wstępnego wybrania jednego przycisku:

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

W Jquery 1.6+ kod the .preferowana jest metoda prop ():

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

Aby odznaczyć przyciski:

$("[name=color]").removeAttr("checked");
 52
Author: Benjk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-13 15:31:38

Twój problem polega na tym, że selektor atrybutów Nie zaczyna się od @.

Spróbuj tego:

$('input[name="correctAnswer"]').attr('checked', false);
 10
Author: bdukes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-10 17:52:36
$('#radio1').removeAttr('checked');
$('#radio2').removeAttr('checked');
$('#radio3').removeAttr('checked');
$('#radio4').removeAttr('checked');

Or

$('input[name="correctAnswer"]').removeAttr('checked');
 4
Author: Waqas Ali Khan Puar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-20 13:05:21

W końcu po wielu testach, myślę, że najwygodniejszym i najskuteczniejszym sposobem ustawienia jest:

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

Jest wymagane odświeżenie obiektu JQueryUI.

Pobranie wartości jest łatwe:

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

Testowane z JQuery 1.6.1, jQuery UI 1.8.

 4
Author: vv-reflex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-30 12:37:00

Wiem, że to jest stare i że jest to trochę off topic, ale załóżmy, że chcesz odznaczyć tylko określone przyciski radiowe w kolekcji:

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

A jeśli masz do czynienia z listą radiobutton, możesz użyć selektora: checked, aby uzyskać tylko ten, który chcesz.

$("#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">
 2
Author: Nielsvh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-29 00:07:25

Zestaw przycisków radiowych sprawdzany przez 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>

Kod Jquery:

$('div#somediv input:radio:nth(0)').attr("checked","checked");
 0
Author: sonali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-24 00:47:42

Jeśli chcesz wyczyścić wszystkie przyciski radiowe w DOM:

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

 0
Author: elzaer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-12 22:19:47
<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
Author: Lakshmana Kumar D,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-20 12:52:19

Ustaw wszystkie przyciski opcji z powrotem na domyślne:

$("input[name='correctAnswer']").checkboxradio( "refresh" );
 -1
Author: RDD,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-12 13:38:21

Gdzie masz: <input type="radio" name="enddate" value="1" />

Po value = " 1 " Możesz również po prostu dodać unchecked =" false" />

Linia będzie wtedy:

<input type="radio" name="enddate" value="1" unchecked =" false" />
 -1
Author: Okee Dokee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-12 13:50:58

Dlaczego nie:

$("#radio1, #radio2, #radio3, #radio4").checked = false;
 -3
Author: cloudhead,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-10 17:48:23