Cómo restablecer los botones de radio en jQuery para que ninguno esté marcado

Tengo botones de radio en HTML como este:

 1 2 3 4  

Esto está en una etiqueta de formulario, y cuando el usuario envía un formulario, quiero que todos los botones de radio vuelvan a ser los predeterminados. Significa que ninguno de ellos verificado.

Tengo este código pero da un error que dice que [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; 

Estoy haciendo esto en IE 6.

En las versiones de jQuery anteriores a 1.6 use:

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

En las versiones de jQuery después de 1.6 debes usar:

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

pero si usa 1.6.1+ puede usar la primera forma (vea la nota 2 a continuación).

Nota 1: es importante que el segundo argumento sea falso y no “falso”, ya que “falso” no es un valor falso. es decir

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

Nota 2: A partir de jQuery 1.6.0, ahora hay dos métodos similares, .attr y .prop que hacen dos cosas relacionadas pero ligeramente diferentes. Si en este caso particular, el consejo proporcionado arriba funciona si usa 1.6.1+. Lo anterior no funcionará con 1.6.0, si está utilizando 1.6.0, debe actualizar. Si quieres los detalles, sigue leyendo.

Detalles: cuando se trabaja con elementos HTML DOM directos, hay propiedades asociadas al elemento DOM ( checked , type , value , etc.) que proporcionan una interfaz para el estado en ejecución de la página HTML. También existe la interfaz .getAttribute / .setAttribute que proporciona acceso a los valores del atributo HTML como se proporciona en el HTML. Antes de 1.6 jQuery difuminaba la distinción al proporcionar un método, .attr , para acceder a ambos tipos de valores. jQuery 1.6+ proporciona dos métodos, .attr y .prop para distinguir entre estas situaciones.

.prop permite establecer una propiedad en un elemento DOM, mientras que .attr permite establecer un valor de atributo HTML. Si está trabajando con DOM simple y configura la propiedad checked, elem.checked , en true o false , cambia el valor en ejecución (lo que el usuario ve) y el valor devuelto rastrea el estado en la página. elem.getAttribute('checked') sin embargo, solo devuelve el estado inicial (y devuelve 'checked' o undefined dependiendo del estado inicial del HTML). En 1.6.1+ con .attr('checked', false) , elem.removeAttribute('checked') y elem.checked = false dado que el cambio causó muchos problemas de compatibilidad con versiones anteriores y realmente no puede decir si quería establecer el atributo HTML o la propiedad DOM. Ver más información en la documentación para .prop .

La mejor forma de establecer el estado de los botones de radio en jquery:

HTML:

  Orange  Pink  Black  Pinkish Purple 

Código Jquery (1.4+) para preseleccionar un botón:

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

En el código Jquery 1.6+, se prefiere el método .prop ():

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

Para deseleccionar los botones:

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

Su problema es que el selector de atributos no comienza con un @ .

Prueba esto:

 $('input[name="correctAnswer"]').attr('checked', false); 
 $('#radio1').removeAttr('checked'); $('#radio2').removeAttr('checked'); $('#radio3').removeAttr('checked'); $('#radio4').removeAttr('checked'); Or $('input[name="correctAnswer"]').removeAttr('checked'); 

Finalmente, después de muchas pruebas, creo que la forma más conveniente y eficiente de predefinir es:

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

La actualización es necesaria con el objeto JQueryUI.

Recuperar el valor es fácil:

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

Probado con JQuery 1.6.1, JQuery UI 1.8.

Sé que esto es viejo y que esto está un poco fuera de tema, pero suponiendo que quisieras quitar solo botones de radio específicos en una colección:

 $("#go").click(function(){ $("input[name='correctAnswer']").each(function(){ if($(this).val() !== "1"){ $(this).prop("checked",false); } }); }); 
  1 2 3 4  

Botón de radio establecido revisado a través de jquery:

 

código jquery:

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

Si desea borrar todos los botones de opción en el DOM:

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

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

Configure todos los botones de opción nuevamente:

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

Donde tiene:

Después de value = “1” también puedes agregar unchecked =" false" />

La línea será entonces:

  

¿Por qué no lo haces?

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