2010-02-18 257 views
39

我想抓住以下所有选定的项目选择倍数,并用逗号分隔它们。代码如下:JQuery - 多个选择选项

<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> 

我找的结果是:

住宅 - 外墙保温,商业 - 外墙保温,...

感谢您的帮助。 -B

回答

71

您可以使用:selected选择器和内联$.map()函数作为链中的一部分。

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

同意。对于完整的jQuery性感,map()绝对是最佳选择。 – user113716 2010-02-18 16:41:49

+8

完整的jQuery的性感是强制性的;) – Sampson 2010-02-18 16:43:04

+0

打我吧,.map()方式更优雅! – 2010-02-18 16:51:51

1

像这样的东西应该做的伎俩:

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

你错过了后 “选项” :selected否则你会选择每一个选项,而不仅仅是那些选择 – 2010-02-18 16:30:07

+0

好去处,现在添加它:-) – 2010-02-18 16:34:48

22

值添加到一个数组,并使用join创建的字符串:

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

您需要文本()而不是val() – kgiannakakis 2010-02-18 16:31:15

+1

'val()'实际上仍然会从选项中获取文本if ere没有价值属性。 – 2010-02-18 16:33:31

+0

我刚刚尝试过,val()工作得很好。 – 2010-02-18 16:34:06

1

在这里你去:

var result = new Array(); 

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

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

在多个选择元件,所述select元件的val命令将返回选定的选项值的阵列。如果没有值存在时,该元件的文本用于:

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

更新:然而,当有返回val()null空数组没有选择的选项。一种方法来解决这个问题:

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

可以在this demo I put together玩弄它。

the docs

<select multiple="multiple">元件的情况下,所述.val()方法返回包含每个选择的选项的阵列。

+0

虽然没有选择任何选项的错误,对吧? – 2010-02-18 16:58:30

+0

@Russell,好点。我更新了我的答案,以适应非选择。还有很多其他的方法。 – 2010-02-18 17:02:54

+0

伟大的解决方案。谢谢! – 2012-05-29 15:40:12

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

如果你添加一些评论,为什么你编写/编辑该代码以便其他人可以理解,这会更好。 – 2016-07-16 07:49:41

0

试试这个:

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(', ');