2009-06-10 7 views
122

geprüft habe ich Radio-Buttons in HTML wie folgt aus:Wie Radiobuttons in jQuery zurückgesetzt, so dass keine

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

Dieses in einem Formular-Tag ist, und wenn der Benutzer eine Form ich all das Radio machen wollen einreicht Knöpfe zurück zum Standard. Bedeutung keiner von ihnen überprüft.

Ich habe diesen Code, aber es gibt eine Fehlermeldung, [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; 

ich dies in IE tue 6.

+0

Wenn @ lambacck Antwort funktioniert nicht für Sie den Bug-Tracker auf der JQuery-Website [http://bugs.jquery.com/ticket/10910] zu sehen. Wenn Sie (wie ich war ...) eine Reihe von Optionsfeldern durchlaufen haben, um alle auf einen Standardwert zurückzusetzen, wird der '# (Selektor) .prop ('checked', true);' fehlgeschlagen, wenn er folgt Versuchen, einen nachfolgenden Optionsschalter in derselben Gruppe auf einen nicht markierten Status zu setzen. Der Trick besteht darin, den Radio-Button nur in einen aktivierten Status zu setzen und die Optionsfeld-Gruppe das tun zu lassen, was sie tut (deaktivieren Sie die anderen ...). Der Aufruf von '$ (selector) .click();' funktioniert ebenfalls und löst alle assoziierten Ereignisse aus. –

Antwort

235

In Versionen von jQuery vor 1.6 Verwendung:

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

In Versionen von jQuery nach 1.6 sollten Sie verwenden:

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

aber wenn Sie verwenden 1.6.1+ Sie das erste Formular verwenden (siehe 2 Hinweis unten).

Anmerkung 1: es ist wichtig, dass das zweite Argument falsch und nicht "false" sein seit "false" kein falsy Wert ist. das heißt

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

Anmerkung 2: Ab jQuery 1.6.0, gibt es nun zwei ähnliche Verfahren .attr und .prop, die zwei verwandte, aber etwas andere Dinge zu tun. Wenn Sie in diesem speziellen Fall den Hinweis oben verwenden, wenn Sie 1.6.1+ verwenden. Das obige funktioniert nicht mit 1.6.0, wenn Sie 1.6.0 verwenden, sollten Sie ein Upgrade durchführen. Wenn Sie die Details möchten, lesen Sie weiter.

Details: Wenn mit geraden HTML DOM-Elementen arbeiten, geben es Objekte, die das Element DOM angebracht (checked, type, value usw.), die eine Schnittstelle zum Betriebszustand der HTML-Seite zur Verfügung stellen. Es gibt auch die .getAttribute/.setAttribute Schnittstelle, die Zugriff auf die HTML-Attributwerte bietet, wie sie im HTML bereitgestellt werden. Vor 1.6 jQuery hat die Unterscheidung verwischt, indem eine Methode .attr bereitgestellt wurde, um auf beide Arten von Werten zuzugreifen. jQuery 1.6+ bietet zwei Methoden, .attr und .prop, um zwischen diesen Situationen zu unterscheiden.

.prop können Sie eine Eigenschaft für ein DOM-Element festlegen, während .attr können Sie einen HTML-Attributwert festlegen. Wenn Sie mit einfachem DOM arbeiten und die geprüfte Eigenschaft elem.checked auf true oder false setzen, ändern Sie den laufenden Wert (was der Benutzer sieht) und der zurückgegebene Wert verfolgt den Zustand der Seite. elem.getAttribute('checked') gibt jedoch nur den Anfangszustand zurück (und gibt 'checked' oder undefined zurück, abhängig vom Anfangszustand aus dem HTML). In 1.6.1+ unter Verwendung von .attr('checked', false) funktioniert sowohl elem.removeAttribute('checked') als auch elem.checked = false, da die Änderung eine Menge von Abwärtskompatibilitätsproblemen verursachte und es nicht wirklich feststellen kann, ob Sie das HTML-Attribut oder die DOM-Eigenschaft festlegen wollten. Weitere Informationen finden Sie unter documentation for .prop.

+0

Es ist wichtig, für das zweite Argument falsch statt "falsch" zu übergeben. – Casebash

+0

Der Wert "false" für das zweite Argument ist wichtig, da das zweite Argument der einzustellende Wert ist. Wenn das zweite Argument leer ist, bedeutet das, dass Sie mir den Wert des ersten Elements geben, das mit dem Selektor übereinstimmt. – lambacck

+1

@Noldorin - "Truthy" ist ein perfekt cromulent Wort. (Können Sie eine bessere Art vorschlagen, das Konzept von "truthy" auszudrücken - mit nur einem Wort?) – nnnnnn

-3

Warum Sie nicht tun:

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

Sie können nicht einfach die checked-Eigenschaft für das vom jQuery-Aufruf zurückgegebene Array festlegen. Sie müssen die attr() -Funktion verwenden, um diese Eigenschaft für die Elemente innerhalb des Arrays festzulegen. – bdukes

+0

das macht dann nicht 'unchecked' –

10

Ihr Problem ist, dass die Attributauswahl nicht mit einem @ beginnt.

Versuchen Sie folgendes:

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

Radio-Button-Set durch jquery geprüft:

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

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

Der beste Weg, Radiobuttons Zustand in Jquery zu setzen:

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+) -Code vorzuwählen eine Taste:

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

In Jquery Code 1.6+ die .prop() Methode bevorzugt wird:

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

abzuwählen die Knöpfe:

$("[name=color]").removeAttr("checked"); 
4
$('#radio1').removeAttr('checked'); 
$('#radio2').removeAttr('checked'); 
$('#radio3').removeAttr('checked'); 
$('#radio4').removeAttr('checked'); 

Or 

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

schließlich nach vielen Tests, ich glaube, die bequemste und effizienteste Weg, um voreingestellt ist:

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

Die Aktualisierung wird mit dem Objekt jQueryUI erforderlich.

den Wert Abrufen ist einfach:

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

Getestet mit JQuery 1.6.1 JQuery UI 1.8.

+0

Danke für den Abrufcode. –

-1

Wo Sie haben: <input type="radio" name="enddate" value="1" />

Nach value = "1" können Sie auch nur hinzufügen unchecked =" false" />

Die Linie wird dann sein:

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

Hey ich denke du hast deine Antwort unvollständig hinterlassen. – Amar

-1

Stellen Sie alle Radio-Buttons wieder auf die Standard:

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

Wenn Sie alle Radio-Buttons in dem DOM löschen:

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

Ich weiß, das alt ist und dass dies ein wenig off topic, aber man angenommen, wollte nur bestimmte Radio-Buttons deaktivieren in einer Sammlung:

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

Und wenn Sie d Wenn Sie mit einer Radiobutton-Liste arbeiten, können Sie den Selektor: check verwenden, um genau den gewünschten auszuwählen.

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