如何在javascript中访问多个选择的数组数据

时间:2013-05-08 19:21:36

标签: javascript html multiple-select

我有一个多选框,我想在javascript中访问所选数据。 这是代码:

<form onsubmit="return false;" id="multisel">
  <select name="a[]" id="a" multiple style="width:350px;" tabindex="4">
    <option value="Pedro">1</option>
    <option value="Alexis">2</option>
    <option value="Messi">3</option>
    <option value="Villa">4</option>
    <option value="Andres">5</option>
    <option value="Sergio">6</option>
    <option value="Xavi">7</option>
  </select>

  <button id="btn1" onclick="ajaxmultiselect()" type="submit" class="btn btn-primary">Save changes</button>

  <p id="status"></p>
</form>

这是我到目前为止尝试过的代码:

<script>    
function ajaxmultiselect(){
  var input  = [];
  input = document.getElementById("a").value;
  var status = _("status");
  if(input == ""){
    status.innerHTML = "Fill out all of the form data";
  }else {
    status.innerHTML = input;
  }
}
</script>

当我运行代码时,它只给出第一个值。 我试图访问PHP中的值,它工作正常,它将值作为数组传递给PHP。为什么不用javascript做同样的事情?

我还试图为值的长度运行一个循环但是只计算第一个选择的长度。 我想显示将要选择的所有值。

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:3)

您可以执行以下操作:

function getSelectedOptions(element) {
    // validate element
    if(!element || !element.options)
        return []; //or null?

    // return HTML5 implementation of selectedOptions instead.
    if (element.selectedOptions)
        return element.selectedOptions;

    // you are here because your browser doesn't have the HTML5 selectedOptions
    var opts = element.options;
    var selectedOptions = [];
    for(var i = 0; i < opts.length; i++) {
         if(opts[i].selected) {
             selectedOptions.push(opts[i]);
         }
    }
    return selectedOptions;
}

然后更改您的ajaxmultiselect(),因此您可以这样称呼它:

input = getSelectedOptions(document.getElementById("a"));

你必须迭代价值观。

答案 1 :(得分:1)

如果您想获得多个选定项目,可以尝试以下内容:

function GetSelectedItems() {
            var select = document.forms[0].a;
            var selectedList = [];

            for (var i = 0; i < select.options.length; i++) {
                if (select.options[i].selected) {
                    selectedList.push(select.options[i].value);
                }
            }

            alert(Array.join(selectedList, ","));
        }

答案 2 :(得分:0)

document.getElementById('a').options //All Options

这将为您提供一系列可以迭代的选项。

答案 3 :(得分:0)

对于给定的<select>元素,所有选定的选项都在selectedOptions属性中。 selectedIndex属性具有第一个选定选项的索引,如果没有选择,则为-1。每个选项都是该元素的DOM对象,因此它们的值在value属性中。所以:

function ajaxmultiselect(){
  var input  = [];
  var select = document.forms[0].a;
  var status = _("status");
  var options = select.selectedOptions;
  if(select.selectedIndex == -1){
    // no selection
    status.innerHTML = "Fill out all of the form data";
  }else {
    for (var i = 0; i < options.length)
      input.push(options[i].value);
    status.innerHTML = input.join(", ");
  }
}

从那里你应该能够得到你想要的任何东西。