Wie wähle ich in jQuery ein Element anhand seines Namensattributs aus?

327

Ich habe 3 Optionsfelder auf meiner Webseite, wie unten:

<label for="theme-grey">
  <input type="radio" id="theme-grey" name="theme" value="grey" />Grey</label>
<label for="theme-pink">
  <input type="radio" id="theme-pink" name="theme" value="pink" />Pink</label>
<label for="theme-green">
  <input type="radio" id="theme-green" name="theme" value="green" />Green</label>

In jQuery möchte ich den Wert des ausgewählten Optionsfelds abrufen, wenn auf eines dieser drei geklickt wird. In jQuery haben wir ID- (#) und Klassen- (.) Selektoren, aber was ist, wenn ich ein Optionsfeld mit seinem Namen wie unten suchen möchte?

$("<radiobutton name attribute>").click(function(){});

Bitte sagen Sie mir, wie ich dieses Problem lösen kann.

Prashant
quelle
5
Sie müssen das Attribut 'for' nicht unbedingt angeben, solange die Felder zwischen den entsprechenden 'label'-Tags enthalten sind
Lucius
2
jQuery 1.8 und höher ändert dies .... Ich habe unten eine Antwort hinzugefügt, die dies erklärt.
Kevin LaBranche
3
Die Antwort von A1rPun ist die beste: ein Einzeiler ohne jQuery!
Rudey
1
Verwendet ein Optionsfeld zum Aufrechterhalten des Status in meiner JS-App. Debuggen Sie eine gute Stunde, bevor Sie diesen Thread überprüfen. Überprüfen Sie dies heraus
Prasanth
In der einfachen JS:document.querySelectorAll("input:radio[name=theme]").forEach(function() { this.onclick=function() { var value = this.value; }; });
Mplungjan

Antworten:

338

Dies sollte es tun, all dies steht in der Dokumentation , die ein sehr ähnliches Beispiel dafür hat:

$("input[type='radio'][name='theme']").click(function() {
    var value = $(this).val();
});

Ich sollte auch beachten, dass Sie mehrere identische IDs in diesem Snippet haben. Dies ist ungültiges HTML. Verwenden Sie Klassen, um eine Reihe von Elementen und keine IDs zu gruppieren, da diese eindeutig sein sollten.

Paolo Bergantino
quelle
4
@gargantaun - Wenn Sie auf ein Optionsfeld klicken, was passiert damit?
Paolo Bergantino
11
Guter Punkt. Obwohl es immer noch nicht "Wie erhalte ich einen ausgewählten Radiobutton-Wert unter Verwendung seines Namens in jQuery?" Ist. Es lautet "Wie erhalte ich einen ausgewählten Radiobutton-Wert, wenn ich mit jQuery darauf klicke?". Ein kleiner Unterschied, aber einer, der mich ein bisschen verblüffte.
gigantisch
1
Entsprechend der Frage ist diese Antwort richtig. In globaler Sicht entscheiden wir uns für Claytons Antwort.
Krish
8
Ab jQuery 1.8 kann jQuery [type='radio']stattdessen :radiodie Leistungssteigerung der nativen DOM- querySelectorAll()Methode nutzen.
Adam
2
Die Antwort von @PaoloBergantino ist zu 100% korrekt, da der Wert nach dem Klicken auf das gewünschte Optionsfeld zurückgegeben wird. Die Antwort von @ Clayton Rabenda gibt dies nicht an.
Azam Alvi
185

Versuchen Sie Folgendes, um festzustellen, welches Optionsfeld aktiviert ist:

$('input:radio[name=theme]').click(function() {
  var val = $('input:radio[name=theme]:checked').val();
});

Das Ereignis wird für alle Optionsfelder in der Gruppe abgefangen und der Wert der ausgewählten Schaltfläche wird in val platziert.

Update: Nach dem Posten habe ich entschieden, dass Paolos Antwort oben besser ist, da sie eine DOM-Durchquerung weniger verwendet. Ich lasse diese Antwort stehen, da sie zeigt, wie das ausgewählte Element browserübergreifend kompatibel ist.

jeff.mitchel
quelle
3
Basis, wie ich die Frage gelesen habe, das war die Antwort, die ich brauchte. : geprüft ist was mir in meiner Gleichung gefehlt hat. Vielen Dank.
HPWD
9
Ab jQuery 1.8 kann jQuery [type='radio']stattdessen :radiodie Leistungssteigerung der nativen DOM- querySelectorAll()Methode nutzen.
Adam
Ich gab ein Leerzeichen nach dem Doppelpunkt und bevor ich versehentlich "überprüft" habe. Stellen Sie also bitte sicher, dass kein Platz vorhanden ist.
Rauchender Affe
Eine nützliche Antwort für diejenigen, die den Wert nicht von einem Klickereignishandler erhalten möchten. Andernfalls müssen Sie :checkedermitteln, welche Schaltfläche aktiviert ist, z. B. mit einem Ereignishandler zum Senden von Formularen, bei dem das thisSchlüsselwort nicht der angeklickten Schaltfläche zugeordnet ist.
Che-Azeh
155
$('input:radio[name=theme]:checked').val();
Jay
quelle
Ich fuhr einfach fort $("input[name=theme]:checked").val();(ließ das :radioTeil weg und es scheint in IE, FF, Safari und Chrome gut zu funktionieren. Ich musste mit jQ v 1.3 arbeiten ... Das bedeutet natürlich, dass es nur ein Element namens "Thema" gibt.
Morespace54
2
Dies ist die beste Antwort IMO, es heißt "Hol mir den Wert des CHECKED-Radios mit DIESEM Namen". Keine Notwendigkeit für Veranstaltungen usw.
ProVega
39

ein anderer Weg

$('input:radio[name=theme]').filter(":checked").val()
h0mayun
quelle
1
Dieser ist nützlich, wenn Sie daran interessiert sind, den Wert +1
swapnesh
Dies ist solide, da Sie eine Variable verwenden können, um die Optionsfelder beizubehalten, z. B. $themeRadios = $('input:radio[name=theme'])um Ereignishandler festzulegen und dann den Wert mithilfe des Filters abzurufen, z $themeRadios.filter(":checked").val().
Joshua Pinter
Ich liebe diese Lösung.
Abel
20

Das funktioniert gut für mich. Zum Beispiel haben Sie zwei Optionsfelder mit demselben "Namen" und wollten nur den Wert des aktivierten abrufen. Sie können diesen versuchen.

$valueOfTheCheckedRadio = $('[name=radioName]:checked').val();
wdonayredroid
quelle
Der Grund, warum diese Antwort besser ist als die derzeit akzeptierte Antwort mit 230+ Stimmen, liegt darin, dass diese Antwort auch berücksichtigt, wenn der Benutzer über die Tastatur mit einem Optionsfeld interagiert.
Gmeben
16

Der folgende Code wird verwendet, um den ausgewählten Optionsfeldwert nach Namen abzurufen

jQuery("input:radio[name=theme]:checked").val();

Danke Adnan

Muhammad Adnan
quelle
hmm .. habe ich deine Code-Formatierung in deiner letzten Antwort nicht korrigiert? Bitte kümmern Sie sich selbst
darum
13

Ich habe diese Frage gefunden, als ich nach einem Upgrade von 1.7.2 von jQuery auf 1.8.2 nach einem Fehler gesucht habe. Ich füge meine Antwort hinzu, da sich in jQuery 1.8 und höher eine Änderung geändert hat, die die Art und Weise ändert, wie diese Frage jetzt beantwortet wird.

Mit jQuery 1.8 haben sie die Pseudo-Selektoren wie: radio ,: checkbox ,: text veraltet .

Um dies zu tun, ersetzen Sie jetzt einfach das :radiodurch [type=radio].

Ihre Antwort gilt nun für alle Versionen von jQuery 1.8 und höher:

$("input[type=radio][name=theme]").click(function() { 
    var value = $(this).val(); 
}); 

Informationen zur Änderung in der Readme-Datei 1.8 und zum für diese Änderung spezifischen Ticket sowie Informationen dazu finden Sie auf der Seite : Radioauswahl im Abschnitt Zusätzliche Informationen.

Kevin LaBranche
quelle
5
: geprüft ist nicht veraltet. So können Sie verwenden$("input[type='radio'][name='theme']:checked")
Adam
12

Für alle, die keine Bibliothek einbinden möchten, um etwas wirklich Einfaches zu tun:

document.querySelector('[name="theme"]:checked').value;

jsfiddle

Eine Leistungsübersicht der aktuellen Antworten finden Sie hier

A1rPun
quelle
1
Danke für diese Antwort. Weil ich nicht in der Lage war, die akzeptierte Antwort in irgendeiner Form zum Arbeiten zu bringen.
Chris Holmes
9

Wenn Sie den Wert des standardmäßig ausgewählten Optionsfelds vor einem Klickereignis wissen möchten, versuchen Sie Folgendes:

alert ($ ("Eingabe: Radio: markiert"). val ());
lhoess
quelle
6

Sie können die Filterfunktion verwenden, wenn Sie mehr als eine Funkgruppe auf der Seite haben (siehe unten)

$('input[type=radio]').change(function(){
    var value = $(this).filter(':checked' ).val();
    alert(value);
});

Hier ist Geigen-URL

http://jsfiddle.net/h6ye7/67/

Muhammad Salman
quelle
4
<input type="radio" name="ans3" value="help"> 
<input type="radio" name="ans3" value="help1">
<input type="radio" name="ans3" value="help2">

<input type="radio" name="ans2" value="test"> 
<input type="radio" name="ans2" value="test1">
<input type="radio" name="ans2" value="test2">

<script type="text/javascript">
  var ans3 = jq("input[name='ans3']:checked").val()
  var ans2 = jq("input[name='ans2']:checked").val()
</script>
Kartheek
quelle
4

Wenn Sie einen wahren / falschen Wert wünschen, verwenden Sie diesen:

  $("input:radio[name=theme]").is(":checked")
gls123
quelle
3

So etwas vielleicht?

$("input:radio[name=theme]").click(function() { 
 ...
}); 

Wenn Sie auf ein Optionsfeld klicken, wird es meiner Meinung nach ausgewählt, sodass dies für das ausgewählte Optionsfeld aufgerufen wird.

tschaible
quelle
1
Das @ ist ab jQuery 1.3 ungültig (vorher sogar veraltet). blog.jquery.com/2009/01/05/help-test-jquery-13-beta-2 "Alte, XPath, Stilattribut-Selektoren: [@ attr = value]. Diese sind seit geraumer Zeit veraltet - und wir entfernen sie endlich. Um das Problem zu beheben, entfernen Sie einfach das @! "
Racerror
3

Wenn Sie mehr als eine Gruppe von Optionsfeldern auf derselben Seite haben, können Sie dies auch versuchen, um den Wert des Optionsfelds zu ermitteln:

$("input:radio[type=radio]").click(function() {
    var value = $(this).val();
    alert(value);
});

Prost!

ahmed
quelle
2

Sie können auch eine CSS-Klasse verwenden, um den Bereich der Optionsfelder zu definieren, und anschließend den Wert mithilfe der folgenden Optionen bestimmen

$('.radio_check:checked').val()
Daniel Fernandes
quelle
1

Das hat bei mir funktioniert ..

HTML:

<input type="radio" class="radioClass" name="radioName" value="1" />Test<br/>
<input type="radio" class="radioClass" name="radioName" value="2" />Practice<br/>
<input type="radio" class="radioClass" name="radioName" value="3" />Both<br/>

Jquery:

    $ (". radioClass"). each (function () {
        if ($ (this) .is (': geprüft'))
        alert ($ (this) .val ());
    });

Ich hoffe es hilft..

Ravi M.
quelle
0
$('input:radio[name=theme]').bind(
  'click',
  function(){
    $(this).val();
});
bläulich
quelle
0

Möglicherweise stellen Sie fest, dass die Verwendung der Klassenauswahl zum Abrufen des ASP.NET RadioButtonSteuerelementwerts immer leer ist. Hier ist der Grund.

Sie erstellen die RadioButtonSteuerung ASP.NETwie folgt:

<asp:RadioButton runat="server" ID="rbSingle" GroupName="Type" CssClass="radios" Text="Single" />
<asp:RadioButton runat="server" ID="rbDouble" GroupName="Type" CssClass="radios" Text="Double" />
<asp:RadioButton runat="server" ID="rbTriple" GroupName="Type" CssClass="radios" Text="Triple" />

Und ASP.NETrendert folgendes HTML für IhreRadioButton

<span class="radios"><input id="Content_rbSingle" type="radio" name="ctl00$Content$Type" value="rbSingle" /><label for="Content_rbSingle">Single</label></span>
<span class="radios"><input id="Content_rbDouble" type="radio" name="ctl00$Content$Type" value="rbDouble" /><label for="Content_rbDouble">Double</label></span>
<span class="radios"><input id="Content_rbTriple" type="radio" name="ctl00$Content$Type" value="rbTriple" /><label for="Content_rbTriple">Triple</label></span>

Denn ASP.NETwir möchten keinen RadioButtonKontrollnamen oder keine ID verwenden, da sie sich aus irgendeinem Grund außerhalb der Hand des Benutzers ändern können (Änderung des Containernamens, des Formularnamens, des Benutzerkontrollnamens usw.), wie Sie im obigen Code sehen können.

Der einzig mögliche Weg, um den Wert von RadioButtonusing jQuery zu ermitteln, ist die Verwendung der CSS-Klasse, wie in dieser Antwort auf eine völlig unabhängige Frage wie folgt erwähnt

$('span.radios input:radio').click(function() {
    var value = $(this).val();
});
AaA
quelle