2010-02-18 4 views
39

Ich versuche, alle ausgewählten Elemente im folgenden wählen Sie mehrere und trennen sie durch ein Komma. Der Code ist unten:JQuery - Mehrere Optionen auswählen

<select id="ps-type" name="ps-type" multiple="multiple" size="5"> 
    <option>Residential - Wall Insulation</option> 
    <option>Residential - Attic /Crawl Space Insulation</option> 
    <option>Residential - Foundation Insulation</option> 
    <option>Residential - Exterior Roof System</option> 
    <option>Commercial - Wall Insulation</option> 
    <option>Commercial - Air Barrier System (Walltite)</option> 
    <option>Commercial - Roof System</option> 
</select> 

Das Ergebnis ich suche ist die folgende:

Wohn - Wandisolierung, Gewerbe - Wandisolierung, ...

Danke für die Hilfe. -B

Antwort

71

Sie können den Selektor :selected und die Inline-Funktion $.map() als Teil Ihrer Kette verwenden.

$("option:selected").map(function(){ return this.value }).get().join(", "); 
+6

Einverstanden. Für volle Sexualität ist map() definitiv der richtige Weg. – user113716

+8

Volle jQuery Sexiness ist obligatorisch;) – Sampson

+0

schlag mich dazu, .map() viel eleganter! –

1

So etwas sollte es tun:

var result = ""; 
$('#ps-type option:selected').each(function(i, item){ 
    result += $(this).val() + ", "; 
}); 
2
var list = ""; 
$('#ps-type option:selected').each(function(){ 
    list += this.value + ", "; 
}); 
return list.substr(0, list.length - 2); 
+0

Sie :selected nach "Option" fehlt sonst würde wählen Sie alle Optionen, und nicht nur diejenigen, –

+0

Guter Ort ausgewählt, fügte es jetzt hinzu :-) –

22

Fügen Sie die Werte in ein Array und verwenden join die Zeichenfolge zu erstellen:

var items = []; 
$('#ps-type option:selected').each(function(){ items.push($(this).val()); }); 
var result = items.join(', '); 
+1

Sie brauchen den text() und nicht das val() – kgiannakakis

+1

'val()' wird tatsächlich immer noch den Text von einer Option, wenn th Es gibt kein Wertattribut. –

+0

Ich habe es gerade ausprobiert, das val() funktioniert ganz gut. –

1

Hier gehen Sie:

var result = new Array(); 

$("#ps-type option:selected").each(function() { 
    result.push($(this).val()); 
}); 

var output = result.join(", "); 
9

Auf einem Mehrfach-Auswahl-Elemente, der val Befehl des select Elements wird einen Array der ausgewählten Optionen Werte zurückgeben. Wenn keine Werte vorhanden sind, wird der Text des Elements verwendet:

var output = $("#ps-type").val().join(', '); 

Update: Wenn es jedoch keine gewählten Optionen sind val()null nicht ein leeres Array zurückgibt. Eine Möglichkeit, dies zu umgehen:

var output = ($("#ps-type").val() || []).join(', '); 

Sie können mit ihm in this demo I put together rumspielen.

Von the docs:

Im Fall von <select multiple="multiple"> Elementen, die .val() Methode gibt einen Array jede ausgewählte Option enthält.

+0

Fehler, wenn keine Optionen ausgewählt sind, oder? –

+0

@ Russell, guter Punkt. Ich habe meine Antwort aktualisiert, um eine Nichtauswahl zu berücksichtigen. Es gibt eine Menge anderer Möglichkeiten. –

+0

Große Lösung. Vielen Dank! –

0

$(function() { 
 
     $('#colorselector').change(function(){ 
 
      $('.colors').hide(); 
 
      $('#' + $(this).val()).show(); 
 
     }); 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<Select id="colorselector" multiple="multiple" size="2"> 
 
    <option value="red">Red</option> 
 
    <option value="yellow">Yellow</option> 
 
    <option value="blue">Blue</option> 
 
</Select> 
 
<div id="red" class="colors" style="display:none"> red... </div> 
 
<div id="yellow" class="colors" style="display:none"> yellow.. </div> 
 
<div id="blue" class="colors" style="display:none"> blue.. </div>

+0

Es wäre besser, wenn Sie einige Kommentare hinzufügen, warum Sie diesen Code geschrieben/bearbeitet haben, damit andere ihn verstehen konnten. –

0

Try this:

var List = new Array(); 
    $('#ps-type option:selected').each(function() { 
     if ($(this).length) { 
       var sel= { 
        name: $this.text() 
       } 
     } 
     List.push(sel); 
    }); 
    var result = List.join(', ');