使用Jquery或JavaScript从Select下拉数组中选择或获取所有值

时间:2014-02-18 13:42:52

标签: javascript jquery html html5 javascript-events

我有以下HTML代码。

<Select name=test[]>
  <option value="">--Please Select--</option>
  <option value="a">Test Value1</option>
</select>

<Select name=test[]>
  <option value="">--Please Select--</option>
  <option value="a">Test Value2</option>
</select>

<Select name=test[]>
  <option value="">--Please Select--</option>
  <option value="a">Test Value3</option>
</select>

现在,在提交表单之前,我想要执行以下操作

  1. 检查是否选择了上述任何一项。
  2. 如果选中,则检索其值。
  3. 我相信我需要循环,但我无法找到我可以先获取所有值的初始语法。

    我知道如何在为select元素指定'id'时检查是否选择了任何值。但在这种情况下,我有'name'属性,这是一个数组。

    我试着去看不同的地方,但我并没有真正找到一个好的解决方案。可能我错过了什么。

    如果需要任何进一步的信息,请告诉我。

7 个答案:

答案 0 :(得分:3)

使用地图功能

var selected = $('select[name="test[]"]').map(function(){
    if ($(this).val())
        return $(this).val();
}).get();

console.log(selected);

答案 1 :(得分:1)

这不是一个完整的解决方案,但可能有希望指出你正确的方向(假设你使用jQuery)

以下代码应循环选择(当它们具有name='test[]'时)并将任何值(非空白)添加到结果数组中。

var results = [];
$("select[name='test[]']").each(function(){
    var val = $(this).val();
    if(val !== '') results.push(val);  
});
console.log(results);

演示:http://jsfiddle.net/W2Mam/

答案 2 :(得分:1)

以下内容将允许您遍历具有除默认值“”之外的任何选定值的选择标记。您可以将其调整为任何其他不需要的值等。

$("select[name='test[]']").each(function(){
    if($(this).val()!='')
    {
        //doStuff
    }
});

答案 3 :(得分:0)

您可以通过这种方式检查和保存方框值

var results = [];
$("select[name='test[]']").each(function(index, val) 
{
   if ($(val).val() == "") { 
       //Not selected 
   }
   else
   {
       //Selected
   }
   //Save results in an array based on the index of selects
   results[index] = $(val).val();
});

然后你可以通过数组并根据索引检查值(或者你可以在.each()函数上面检查它)

答案 4 :(得分:0)

尝试这样做:

$("select[name='test[]']").on('change', function(){
    if(this.value != ""){
        alert(this.value);
     }else{
        alert('no values selected');
        return false;
     }
});

您必须获取change事件的值,因此请使用属性选择器获取元素,然后您可以获取目标元素的值。

答案 5 :(得分:0)

如果您使用此:

var values = $('select[name^="test["]').map(function(){
    if(this.value !== "") return this.value;
})

您将拥有一系列值。

要检查是否选择了一个,只需检查长度:values.length

答案 6 :(得分:0)

您可以使用filter()仅返回具有值的selects,然后map()来获取其值:

var values = $('select[name="test[]"]').filter(function() {
  return $.trim(this.value).length;  
}).map(function() {
  return this.value;
}).get();

显然,你不知道哪个选择具有哪个值,如果你需要知道,你必须使用元素'索引,因为它是唯一的唯一标识符(给定你的标记)。

以下内容将返回一个对象数组,其中包含元素的索引及其值:

var values = $('select[name="test[]"]').filter(function() {
  return $.trim(this.value).length;  
}).map(function() {
  return { index: $(this).index(), value: this.value };
}).get();

要检查是否选择了任何内容,您只需检查values.length

if (!values.length) {
  alert('Nothing was selected');
}

Here's a fiddle

相关问题