如何将值从多选下拉列表推送到数组?

时间:2016-07-21 18:51:58

标签: javascript jquery html arrays drop-down-menu

我正在尝试从多个选择下拉框中将值推送到数组中。我能够做到这一点但发生的事情是它们没有按照我通过splice设置的顺序被推入阵列。它按照在选择框中设置的顺序添加。例如,如果我按[467,341,344,657,677]的顺序选择选项,我的数组显示[344,467,677,341,657]。我希望数组按顺序显示我选择了选项。 这是我的代码:

<select multiple class="yo">
    <option value = "344">opt1</option>
    <option value = "467">opt2</option>
    <option value = "677">opt3</option>
    <option value = "341">opt1</option>
    <option value = "657">opt1</option>
</select>

var optVal = new Array();
        var tArray;
        $('.yo').each(function() {
            var newS = $(this).val(); 
            tArray = newS;
            optVal.splice(0, 0, tArray);

        });

请帮忙!

这是我的小提琴:https://jsfiddle.net/rprakash/e1xcd2gh/

2 个答案:

答案 0 :(得分:1)

如果你只想要select中的值,忽略顺序,你可以使用:

$(".yo").val()

但是,你想要他们的订单,这是一个非常棘手的问题:

var optVal = [];
var tempVal = [];

$(".yo").change(function() {

    $(".yo option").each(function() {
        var val = $(this).val();
        var tempVal = $(".yo").val();

        if(tempVal.indexOf(val) >= 0 && optVal.indexOf(val) < 0) {
            optVal.push(val);
        } else if(tempVal.indexOf(val) < 0 && optVal.indexOf(val) >= 0) {
            optVal.splice(optVal.indexOf(val) , 1);
        }

    })
    console.log("Opt: " + optVal);
})
  • 当值发生变化时,触发
  • 遍历每个option并获取值
  • select
  • 中获取所有选定的值
  • 如果选择了选项但未选择optVal,请按optVal
  • 如果未选择选项且在optVal内,则从optVal
  • 中删除

这将使它们按照选择的顺序保留。

CodePen:http://codepen.io/theblindprophet/pen/RRrJXG?editors=1010

答案 1 :(得分:0)

试试这段代码:

var optVal = new Array();

$('option').click(function() {
  optVal.push($(this).val());
});