Möglichkeiten Radiobuttons auzulesen, mit und ohne Formularelement.
Der Wert des name
Attributes der Radiobuttons bestimmt eine Gruppe von zusammengehörenden Radiobuttons. Diese Gruppe kann innerhalb eines Formulars über diesen Namen angesprochen werden. Folgendermaßen, kann man den Wert des gewählten Radiobuttons ermitteln: document.Formularname.Radiobuttonname.value
document.form1.farbe.value
Achtung Man beachte, dass beim Aufruf der Funktion, das Formular nicht verschickt werden darf, da ansonsten diese Seite oder die Seite, die im action Attribut des Form-Elements angegeben ist, geladen würde. Dadurch würde die Ausgabe nicht angezeigt. Um das zu verhindern, gibt es drei Möglichkeiten:
evt.preventDefault()
hinzugefügt, was soviel bedeutet wie: Standardverhalten verhindern.<form action="javascript:void">
HTML
<form name="form1">
<input type="radio" name="farbe" value="gelb">
<input type="radio" name="farbe" value="orange">
<input type="radio" name="farbe" value="rot">
<input type="radio" name="farbe" value="blau">
<input type="submit" id="btn">
</form>
<p id="output"></p>
Javascript
var output = document.getElementById("output"); var btn = document.getElementById("btn"); btn.addEventListener("click", checkRd); function checkRd(evt) { evt.preventDefault(); output.innerText = document.form1.farbe.value; }
Hier eine Alternative den Wert des gewählten Radio-Buttons zu ermitteln. In CSS kann man über die Pseudoklasse :checked ein gewähltes Element auswählen. Das kann man in Javascript mit dem querySelector nutzen.
Die Radio-Buttons müssen nicht innerhalb eines form-Elements liegen.
document.querySelector('input[name="farbe"]:checked').value;
Den Wert abrufen, wenn irgendein Radio-Button angeklickt wurde
Das change
Ereignis tritt ein, wenn man den Wert eines Eingabefeldes oder Radio-Buttons geändert hat.
Im folgenden Beispiel liefert der Event-Listener über currentTarget
das angeklickte Element und daraus den Wert.
var rdBtn = document.querySelectorAll("input[name='farbe']"); var output = document.getElementById("output"); for(var i = 0; i < rdBtn.length; i++){ rdBtn[i].addEventListener("change", checkRd); } function checkRd(evt){ output.innerHTML = evt.currentTarget.value; }
Im folgenden werden die Buttons in Schleifen durchlaufen.
Radio Buttons haben unter anderem die Attribute checked, value
. Diese kann man in Javascript folgendermaßen ermitteln.
myRadioBtn.value
= Wert des Html-Attributs value BeispielmyRadioBtn.checked
= Ein boolscher Wert, der true liefert, wenn der Radio Button aktiviert ist. BeispielWenn man mittels DOM Methode querySelectorAll()
auf mehrere Radio Buttons zugreift, bekommt man ein Array.
let rdBtn = document.querySelectorAll("input[name='farbe']");
let rdBtn = document.getElementsByName("farbe");
Wie jedes Array kann man die Elemente über den Array-Zugriffsoperator ansprechen.
rdBtn[0].value
rdBtn[0].checked
In einer for -Schleife kann man alle Elemente des Arrays durchlaufen.Beispiel
for(var i=0; i < rdBtn.length; i++){ output.innerHTML += rdBtn[i].value; }
Folgende Methoden sind nicht so elegant wie die anfangs aufgezeigten Möglichkeiten.
Möchte man den Wert des aktivierten Radio Buttons auslesen, durchläuft man die Elemente und fragt die Eigenschaft checked
ab.
for(var i=0; i < rdBtn.length; i++){ if(rdBtn[i].checked == true){ output.innerHTML = rdBtn[i].value; } }
Beispiel
Diese Schleife kann man in eine Funktion legen und per Mausklick aufrufen.
btn.addEventListener("click", checkRd); function checkRd(){ for(var i=0; i < rdBtn.length; i++){ if(rdBtn[i].checked == true){ output.innerHTML = rdBtn[i].value; } } }
Hat man nur 2 Radiobuttons, braucht man lediglich einen der beiden auf checked
abfragen, da der andere Button automatisch den gegenteiligen boolschen Wert hat.
var rdBtn = document.getElementById("jaBtn"); var output = document.getElementById("output"); var btn = document.getElementById("btn"); btn.addEventListener("click", checkRd); function checkRd(evt){ if(jaBtn.checked){ output.innerHTML = "Sie haben sich für einen Newsletter entschieden."; }else{ output.innerHTML = "Sie möchten keinen Newsletter." } }