2012-04-18 13 views
104
$('#mySelectBox option').each(function() { 
    if ($(this).isChecked()) 
     alert('this option is selected'); 
    else 
     alert('this is not'); 
}); 

Anscheinend funktioniert die isChecked nicht. SO meine Frage ist, was ist der richtige Weg, dies zu tun? Danke.Wie überprüft man, ob eine Option ausgewählt ist?

+2

00zebra00 dank für die Suche nach einer Antwort unter th e viele Optionen unten. Bitte beachten Sie jedoch die Konversation in den folgenden Kommentaren, um den besten Weg für den Zugriff auf die ausgewählte Immobilie zu finden. Der allgemeine Grund ist, dass wenn Sie auf ein Element direkt in Javascript zugreifen können (mit 'this.selected'), dass Sie umgehen sollten mit jQuery (' $ (this) .prop ("selected") '), aber sie _will_ beide für Sie arbeiten . – veeTrain

+0

Mögliches Duplikat von [jQuery Ausgewählte Option aus Dropdown abrufen] (https://stackoverflow.com/questions/10659097/jquery-get-selected-option-from-dropdown) –

Antwort

181

UPDATE

Ein direkterer jQuery Methode der gewählten Option wäre:

var selected_option = $('#mySelectBox option:selected'); 

Die Beantwortung der Frage .is(':selected') ist, was Sie suchen:

$('#mySelectBox option').each(function() { 
    if($(this).is(':selected')) ... 

Die nicht jQuery (wohl Best Practice) Weg es zu tun wäre:

Obwohl, wenn Sie nur für den gewählten Wert try suchen:

$('#mySelectBox').val() 

Wenn Sie sich für den Text des gewählten Wert zu tun:

$('#mySelectBox option').filter(':selected').text(); 

Check out: http://api.jquery.com/selected-selector/

Das nächste Mal nach doppelten Fragen suchen:

Get current selected option oder Set selected option oder How to get $(this) selected option in jQuery? oder option[selected=true] doesn't work

+0

Es verwendet jQuery ohne guten Grund. Verwende die nativen js DOM-Eigenschaften. Schau mal [das] (http://stackoverflow.com/a/10213695/601179) – gdoron

+3

Es sieht so aus, als hättest du meine Antwort nicht gelesen. 'this.selected' kann anstelle von' $ (this) .is (": selected") verwendet werden. "Ich schätze, dass es keinen Bedarf für eine jsperf gibt, oder? Ich habe nichts gegen die Verwendung von jQuery !, aber verwenden Sie es, wenn Sie es brauchen, nicht wenn es nichts als Overhead und mehr Code geben. – gdoron

+0

@gdoron 'this.selected' ist vollständig gültig, aber er fragte nach dem richtigen jQuery-Weg, es zu tun. – iambriansreed

21

Sie können die gewählte Option auf diese Weise erhalten:

$('#mySelectBox option:selected')... 

LIVE DEMO

Aber wenn Sie möchten, alle Optionen zu durchlaufen, tun Sie es mit this.selected anstelle von this.isChecked die es nicht gibt:

$('#mySelectBox option').each(function() { 
    if (this.selected) 
     alert('this option is selected'); 
    else 
     alert('this is not'); 
}); 

LIVE DEMO

Update:

Sie viele Antworten bekam darauf hindeutet Sie diese verwenden:

$(this).is(':selected') gut, kann es ein getan werden viel schneller und einfacher mit this.selected also warum sollten Sie es verwenden und nicht die native DOM-Element-Methode ?!

lesen Ihre DOM Eigenschaften und Funktionen im jQuerytag info

+1

@ downvoter obligatorisch zu machen, interessieren sich zu kommentieren?Geh aus den Schatten und kämpfe! :) – gdoron

+0

Vielleicht, weil Sie die Frage nicht beantwortet haben, sondern Best Practice gegeben haben. ;) – iambriansreed

+1

@ambrriansreed. Ha?! Ich habe die Frage nicht beantwortet? ** Welcher Teil in der Frage blieb unbeantwortet? ** – gdoron

2

wissen, ob Sie mit is() nicht vertraut oder bequem sind, können Sie nur den Wert von prop("selected") überprüfen.

As seen here:

$('#mySelectBox option').each(function() { 
    if ($(this).prop("selected") == true) { 
     // do something 
    } else { 
     // do something 
    } 
});​ 

bearbeiten:

Wie @gdoron in den Kommentaren darauf hingewiesen, desto schneller und am besten geeignete Weg, um die ausgewählte Eigenschaft einer Option für den Zugriff ist über den Wähler DOM. Hier ist die Geige update die diese Aktion anzeigt.

if (this.selected == true) { 

scheint genauso gut zu funktionieren! Danke Gdoron.

+0

Können Sie mir bitte erklären, warum sollte er '$ (this) .prop (" selected ")' anstelle von 'verwenden this.selected'?! Was gibt es dir ?? p.s. Ich bin nicht der Downvoter ... – gdoron

+0

@gdoron, der Hauptvorteil, an den ich dachte, war Vertrautheit. Ich bin mir nicht sicher, was "ist" am besten verwendet wird, aber ich mag den Zugriff auf meine Eigenschaften durch Prop und Attr. In den meisten Fällen ist es vielleicht nur eine Frage des Geschmacks. Ja, es gibt einen kuriosen Ausschlag von Down-Voting! – veeTrain

+2

Ich schlage vor, den ** Know Your DOM Eigenschaften und Funktionen ** Teil der 'jQuery' [Tag Info] (http://stackoverflow.com/tags/jquery/info) zu lesen. Es gibt keinen Grund, langsamer Code + mehr Code zu verwenden, um einfache Dinge zu tun. '.is()' sollte für komplizierte Selektoren wie '$ (...) verwendet werden. is ('. foo> [name =" aaa "] input') oder für Eigenschaften, die keine nativen DOM-Elemente sind wie' $ (...). ist (": sichtbar"). – gdoron

1

Verwendung

$("#mySelectBox option:selected"); 

Wenn es zu testen, eine bestimmte Option myoption:

if($("#mySelectBox option:selected").text() == myoption){ 
      //... 
} 
+0

Haben Sie nicht downvote (es gibt eine serielle downvotes hier!) Aber was ist 'myoption' ??? – gdoron

+0

nur eine Zeichenfolge, die eine Beispieloption sein soll, die das OP testen möchte, wenn es ausgewählt ist –

+0

In Bezug auf den Downvote, möchten Sie vielleicht die Kommentare unter [meine Antwort] lesen (http://stackoverflow.com/a/ 10213695/601179). – gdoron

0

In meinem Fall ich weiß nicht, warum immer wahr ist, ausgewählt. So ist die einzige Art, wie ich war in der Lage zu erdenken ist:

var optionSelected = false; 
$('#select_element option').each(function(i, el) { 
    var optionHTMLStr = el.outerHTML; 

    if (optionHTMLStr.indexOf('selected') > 0) { 
     optionSelected = true; 
     return false; 
    } 
}); 
0

Wenn Sie nur überprüfen wollen, ob eine Option ausgewählt ist, dann müssen Sie nicht über alle Optionen zu durchlaufen. Just do

if($('#mySelectBox').val()){ 
    // do something 
} else { 
    // do something else 
} 

Hinweis: Wenn Sie eine Option mit Wert = 0, die Sie auswählbar sein wollen, müssen Sie die if-Bedingung ändern $('#mySelectBox').val() != null

0

Betrachten Sie dies als Ihre Auswahlliste:

<select onchange="var optionVal = $(this).find(':selected').val(); doSomething(optionVal)"> 

           <option value="mostSeen">Most Seen</option> 
           <option value="newst">Newest</option> 
           <option value="mostSell">Most Sell</option> 
           <option value="mostCheap">Most Cheap</option> 
           <option value="mostExpensive">Most Expensive</option> 

          </select> 

dann überprüfen Sie ausgewählte Option wie folgt aus:

function doSomething(param) { 

    if ($(param.selected)) { 
     alert(param + ' is selected!'); 
    } 

}