Wie erhalte ich in jQuery den Wert eines Optionsfelds, wenn alle denselben Namen haben?

108

Hier ist mein Code:

<table>
   <tr>
      <td>Sales Promotion</td>
      <td><input type="radio" name="q12_3" value="1">1</td>
      <td><input type="radio" name="q12_3" value="2">2</td>
      <td><input type="radio" name="q12_3" value="3">3</td>
      <td><input type="radio" name="q12_3" value="4">4</td>
      <td><input type="radio" name="q12_3" value="5">5</td>
   </tr>
</table>
<button id="submit">submit</button>

Hier ist JS:

$(function(){
    $("#submit").click(function(){      
        alert($('input[name=q12_3]').val());
    });
 });

Hier ist JSFIDDLE ! Jedes Mal, wenn ich auf die Schaltfläche klicke, wird 1 zurückgegeben. Warum? Kann mir jemand helfen?

SPG
quelle

Antworten:

226

In Ihrem Code sucht jQuery nur nach der ersten Instanz einer Eingabe mit Namen q12_3, die in diesem Fall den Wert von hat 1. Sie wollen einen Eingang mit dem Namen q12_3, der ist :checked.

$("#submit").click(() => {
  const val = $('input[name=q12_3]:checked').val();
  alert(val);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<table>
  <tr>
    <td>Sales Promotion</td>
    <td><input type="radio" name="q12_3" value="1">1</td>
    <td><input type="radio" name="q12_3" value="2">2</td>
    <td><input type="radio" name="q12_3" value="3">3</td>
    <td><input type="radio" name="q12_3" value="4">4</td>
    <td><input type="radio" name="q12_3" value="5">5</td>
  </tr>
</table>
<button id="submit">submit</button>

Beachten Sie, dass der obige Code nicht mit der Verwendung identisch ist .is(":checked"). Die is()Funktion von jQuery gibt ein boolesches (wahr oder falsch) und kein (ein) Element zurück.


Da diese Antwort immer mehr Beachtung findet, werde ich auch ein Vanille-JavaScript-Snippet hinzufügen.

document.querySelector("#submit").addEventListener("click", () => {
  const val = document.querySelector("input[name=q12_3]:checked").value;
  alert(val);
});
<table>
  <tr>
    <td>Sales Promotion</td>
    <td><input type="radio" name="q12_3" value="1">1</td>
    <td><input type="radio" name="q12_3" value="2">2</td>
    <td><input type="radio" name="q12_3" value="3">3</td>
    <td><input type="radio" name="q12_3" value="4">4</td>
    <td><input type="radio" name="q12_3" value="5">5</td>
  </tr>
</table>
<button id="submit">submit</button>

Bram Vanroy
quelle
16

In Ihrem Selektor sollten Sie außerdem angeben, dass Sie den aktivierten Radiobutton verwenden möchten:

$(function(){
    $("#submit").click(function(){      
        alert($('input[name=q12_3]:checked').val());
    });
 });
Dennis
quelle
1
Ich bekomme 'undefinierten' Wert
Pavan Alapati
@PavanAlapati Wir können Ihnen nicht wirklich sagen, warum, ohne auch Ihren HTML-Code zu sehen. Idealerweise würden Sie eine neue Frage mit Ihrem genauen HTML-Snippet und dem von Ihnen verwendeten Code posten. Sie sollten jedoch nur dann undefiniert werden, wenn: Der Name in der Auswahl nicht mit den Namen der Radiobuttons übereinstimmt; Keiner der Radiobuttons wird überprüft. oder dem aktivierten Radiobutton ist kein Wert zugewiesen.
Dennis
7

Möglicherweise möchten Sie den Selektor ändern:

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

Fantactuka
quelle
7

Es gibt auch einen anderen Weg. Versuchen Sie es mit dem folgenden Code

$(document).ready(function(){

      $("input[name='gender']").on("click", function() {
            alert($(this).val());
        });
});
Ankush Khandekar
quelle
2

$('input:radio[name=q12_3]:checked').val();

Iyes Junge
quelle
0

Verwenden Sie dieses Skript

$('input[name=q12_3]').is(":checked");
Sohil Desai
quelle
4
Die isFunktion von jQuery gibt a zurück boolean, was in diesem Fall nutzlos wäre.
Dennis