Überprüfen des Werts der Optionsfeldgruppe über JavaScript?

74

Das mag albern und geradezu dumm erscheinen, aber ich kann nicht herausfinden, wie ich den Wert einer Optionsfeldgruppe in meinem HTML-Formular über JavaScript überprüfen kann. Ich habe folgenden Code:

<input type="radio" id="genderm" name="gender" value="male" />
<label for="genderm">Male</label>
<input type="radio" id="genderf" name="gender" value="female" />
<label for="genderf">Female</label>

Wie rufe ich den Wert von genderüber JavaScript ab?

Propeller
quelle

Antworten:

73

Wenn Sie eine Javascript-Bibliothek wie jQuery verwenden, ist dies sehr einfach:

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

Dieser Code wählt die checkedEingabe mit dem genderNamen aus und erhält sie value. Einfach, nicht wahr?

Live-Demo

Gdoron unterstützt Monica
quelle
68
Die Frage war "Javascript", nicht "jQuery".
MattiSG
3
@ MattiSG, und da es akzeptiert wurde, hat es dem Fragesteller (und vielen anderen Menschen) geholfen ...
Gdoron unterstützt Monica
10
Nun, ich bin auf diese Frage gestoßen, als ich nach einer Javascript-Lösung gesucht habe. Die Frage ist nicht mit jQuery gekennzeichnet. Als ich die Frage las, in der jQuery nicht erwähnt wurde, denke ich nicht, dass die akzeptierte Antwort von jQuery abhängen sollte. Aber das ist die Macht der Menge, weißt du;) Meine eigene Abwahl wird für all die vielen anderen Leute, denen du bei dieser Antwort geholfen hast, nicht viel ändern :)
MattiSG
Überprüfen Sie die Antworten von @darelf für reine js .. !!
Bino Kochumol Varghese
JQuery war damals in Ordnung.
user2422869
229

Verwenden Sie document.querySelector (), wenn Sie Frameworks vermeiden möchten (was ich fast immer tun möchte).

document.querySelector('input[name="gender"]:checked').value
darelf
quelle
15
Dies erfordert mehr Upvotes, .querySelector()ist die Vanille-Antwort auf so viele jQuery-Fragen ...
Marian
3
Dies ist eine Premiere, die ich noch nie zuvor angemeldet habe, um jemandem eine Stimme zu geben.
Missverstanden
@ Missverstanden hier gleich. Musste mich einloggen, um abzustimmen
Courtney
3
Diese Antwort tut mir leid, dass die Antwort auf eine Frage später von der Community oder den Moderatoren nicht geändert werden kann. Natürlich bei allem Respekt vor der gewählten Antwort (gegenüber beiden an dieser Entscheidung beteiligten Personen).
Axonn
93

In reinem Javascript:

var genders = document.getElementsByName("gender");
var selectedGender;

for(var i = 0; i < genders.length; i++) {
   if(genders[i].checked)
       selectedGender = genders[i].value;
 }

aktualisieren

In reinem Javascript ohne Schleife mit neueren (und möglicherweise noch nicht unterstützten) RadioNodeList:

var form_elements = document.getElementById('my_form').elements;
var selectedGender = form_elements['gender'].value;

Der einzige Haken ist, dass er RadioNodeListnur von der Eigenschaft HTMLFormElement.elementsoder zurückgegeben HTMLFieldSetElement.elementswird. Sie müssen also eine Kennung für das Formular oder die Feldmenge haben, in die die Funkeingänge eingewickelt sind, um sie zuerst abzurufen.

Anthony
quelle
42
Plus eins für die Beantwortung des Titels und ohne jQuery-Antwort.
Driechel
9

Um den Wert zu erhalten, würden Sie Folgendes tun:

document.getElementById("genderf").value;

Aber um zu überprüfen, ob das Optionsfeld aktiviert oder ausgewählt:

document.getElementById("genderf").checked;
Gideon
quelle
1
Das war nicht die Frage. Sie können hier nicht verwenden ID, da Sie die ID nicht kennen oder möglicherweise unzählige Optionsfelder haben. Sie möchten jedoch wissen, welcher Wert an den Server gesendet wird (der ausgewählte Wert der Gruppe). Diese Antwort beantwortet die Frage also nicht wirklich
vsync
@vsync Nicht sicher, was Sie meinen, das OP sagt nichts über Server und fragt (1) in seinem Titel, wie der Wert überprüft und (2) wie der Wert abgerufen werden soll. Beide habe ich basierend auf dem Code des OP beantwortet unter der Voraussetzung.
Gideon
Ich sehe, ich habe es nicht sehr gut erklärt: Was Sie vorgeschlagen haben, wird niemals funktionieren und macht nicht einmal Sinn. Sie könnengetElementById in dieser Situation absolut nicht verwenden . siehe diese Antwort .
vsync
ID entstehen das Problem beim Abrufen des Wertes, ich habe zwei ID im gleichen Namen, es erhält nur 1. ID-Wert nicht zweiten
ßãlãjî
3

Versuchen:


var selectedVal;

for( i = 0; i < document.form_name.gender.length; i++ )
{
  if(document.form_name.gender[i].checked)
    selectedVal = document.form_name.gender[i].value; //male or female
    break;
  }
}

Sudhir Bastakoti
quelle
3

Wenn Sie Ihre Formularelemente in ein Formular-Tag mit einem Namensattribut einschließen, können Sie den Wert einfach mit document.formName.radioGroupName.value abrufen.

<form name="myForm">
    <input type="radio" id="genderm" name="gender" value="male" />
    <label for="genderm">Male</label>
    <input type="radio" id="genderf" name="gender" value="female" />
    <label for="genderf">Female</label>
</form>

<script>
    var selected = document.forms.myForm.gender.value;
</script>
Chris Smith
quelle
Dies scheint browserübergreifende Probleme zu haben.
jfriend00
Dies scheint auch in Chrome nicht mehr zu funktionieren. Ich bin mir sicher, dass es einmal passiert ist. :(
Chris Smith
du hast vergessen .formsund .elements! so sollte es seindocument.forms.myForm.gender.value
kal
Deine Antwort scheint so viel einfacher zu verstehen als die anderen, danke :).
Liam
0

Ohne Schleife:

document.getElementsByName('gender').reduce(function(value, checkable) {
    if(checkable.checked == true) 
        value = checkable.value; 
    return value;
}, '');

reduce ist nur eine Funktion, die dem zweiten Argument des Rückrufs nacheinander Array-Elemente und der zuvor zurückgegebenen Funktion den Wert zuführt, während beim ersten Durchlauf der Wert des zweiten Arguments verwendet wird.

Das einzige Minus dieses Ansatzes ist, dass Reduzieren jedes zurückgegebene Element durchläuft, getElementsByNameselbst nachdem es das ausgewählte Optionsfeld gefunden hat.

przemo_li
quelle
-1

function myFunction() {
document.getElementById("text").value='male'
 document.getElementById("myCheck_2").checked = false;
  var checkBox = document.getElementById("myCheck");
  var text = document.getElementById("text");
  if (checkBox.checked == true){
    text.style.display = "block";
  } else {
     text.style.display = "none";
  }
}
function myFunction_2() {
document.getElementById("text").value='female'
 document.getElementById("myCheck").checked = false;
  var checkBox = document.getElementById("myCheck_2");
  var text = document.getElementById("text");
  if (checkBox.checked == true){
    text.style.display = "block";
  } else {
     text.style.display = "none";
  }
}
Male: <input type="checkbox" id="myCheck"  onclick="myFunction()">
Female: <input type="checkbox" id="myCheck_2"  onclick="myFunction_2()">

<input type="text" id="text" placeholder="Name">

Maximus Su
quelle