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

Javascript 如何将多选下拉列表中的值推送到数组中?,javascript,jquery,html,arrays,drop-down-menu,Javascript,Jquery,Html,Arrays,Drop Down Menu,我试图从多选下拉框将值推送到数组中。我可以做到这一点,但实际情况是,它们没有按我设置的顺序通过拼接推入阵列。它是按照在选择框中设置的顺序添加的。例如,如果我按[467,341,344,657,677]的顺序选择选项,我的数组将显示[344,467,677,341,657]。我希望数组按我选择选项的顺序显示。 这是我的代码: <select multiple class="yo"> <option value = "344">opt1</option>

我试图从多选下拉框将值推送到数组中。我可以做到这一点,但实际情况是,它们没有按我设置的顺序通过拼接推入阵列。它是按照在选择框中设置的顺序添加的。例如,如果我按[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);

        });

opt1
opt2
opt3
opt1
opt1
var optVal=新数组();
跗关节;
$('.yo')。每个(函数(){
var newS=$(this.val();
tArray=新闻;
光学拼接(0,0,tArray);
});
请帮忙

这是我的小提琴:

试试下面的代码:

var optVal = new Array();

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

如果只需要
选择中的值,不考虑顺序,可以使用:

$(".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);
})
var optVal=[];
var tempVal=[];
$(“.yo”).change(函数(){
$(“.yo选项”)。每个(函数(){
var val=$(this.val();
var tempVal=$(“.yo”).val();
if(tempVal.indexOf(val)>=0&&optVal.indexOf(val)<0){
光学推送(val);
}else如果(临时索引(val)<0&&optVal.indexOf(val)>=0){
光刻接头(光刻指数),1;
}
})
控制台日志(“Opt:+optVal”);
})
  • 当值发生更改时,触发
  • 迭代每个
    选项
    并获取值
  • select
  • 如果选择了选项且不在
    optVal
    中,则按下
    optVal
  • 如果未选择选项且在
    optVal
    内,则从optVal中删除
这将使它们保持选定顺序


代码笔:

为什么不直接使用
.push()
?似乎您正在使用事件处理程序,请在代码中向我们展示,并提供一个可运行的示例。我无法用你的代码得到这些结果。我添加了一个小提琴!首先,您并不是真的将任何内容“推”到数组中,只是保留一个值。此外,multi-select不会跟踪您选择项目的顺序,它会在两次单击之间选择所有项目,并以自上而下的方式进行选择。我没有使用push,希望总是在数组的开头添加值,即在索引0处。。。Push做了与我上面的代码相同的事情我已经试过了。我没有得到任何结果。非常感谢。though@rashmeePrakash嗯,我想知道为什么它不起作用。这是一个动态版本的小玩意儿不用担心,有时可能会失败的一件事是使用jquery的.click()函数形式与.on(“click”,function(){})形式。.on方法更通用,可以在添加事件后绑定。太棒了!这管用!不过我有个问题。。。如果我希望下一步选择的每个元素都转到索引0,该怎么办。所以每次我选择一个选项时,我希望该值位于索引0
optVal.unshift(val)