在动态创建的select2多选中获取多维数组

时间:2017-11-28 21:45:46

标签: javascript jquery arrays

我想使用select2 multi-select来实现一个多维数组,如下所示

var options = [['20mg', '40mg'],
               ['Capsule', 'Tablet', 'Syrup'],
               ['Small', 'Medium', 'Large']];

但我得到以下输出:[从堆栈溢出中获取此代码]

["20mg", "40mg", "Capsule", "Tablet"]

这是我在jsbin https://jsbin.com/mayiza/edit?html,js,console,output

上的代码

我错过了什么。我尝试过其他方法。但是他们都没有像我想要的那样工作。

我的代码是:

var test = $(".attributeFormWrapper");
test.on("select2:select", function (event) {
        var values = [];
        // copy all option values from selected
        $(event.currentTarget).find("option:selected").each(function (i, selected) {
            values[i] = $(selected).text();
        });

        console.log("selected values: ", values);

});

select2的Html代码

<div class="attributeFormWrapper">
    <div class="attributeFormRepeat">
        <div class="col-md-12 select2Divs">
            <div class="col-md-6">
                 <div class="row">
                     <div class="form-group">
                         <div class="col-md-11">
                              <label>Attribute (e.g. Color, Size, Stength, Type)</label>
                              <select class="form-control select2ProductAttribute commonSelect2" style="width: 100%;"></select>
                         </div>
                     </div>
                 </div>
             </div>
             <div class="col-md-6">
                 <div class="row">
                     <div class="form-group">
                         <div class="col-md-11">
                             <label>Attribute Value (e.g. Green, 20mg, Capsule)</label>
                             <select class="form-control select2AttributeValues commonSelect2" style="width: 100%;" multiple="multiple"></select>
                         </div>
                     </div>
                 </div>
             </div>
        </div>
        <div class="clearfix"></div>
   </div>

   添加新属性

动态添加下面的select2方法:

 function addrow() {

        var rowToBeCloned = $('.attributeFormWrapper .attributeFormRepeat:last');

        $(".select2ProductAttribute").select2('destroy');
        $(".select2AttributeValues").select2('destroy');


        var newrow = rowToBeCloned.clone();

        $(".attributeFormWrapper").append(newrow);

        selectAttribute();
        $(".select2ProductAttribute").last().val("").trigger("change.select2");
        selectAttributeValues();
        $(".select2AttributeValues").last().val("").trigger("change.select2");

    }

按钮点击事件,我添加了select2 div

 $("#addAttributeDivBtn").click(function() {
        addrow();
 });

1 个答案:

答案 0 :(得分:0)

你需要一个如下所示的数组:

var array = [
0: [ 'e1a' ,'e2a', 'e3a' ],
1: [ 'e1b', 'e2b', 'e3b']
];

但是你要添加这样的数组:

var array = ['e1a','e2a',...'e1b','e2b'];

尝试将所选值分开,然后根据需要准备一个对象或数组。

创建空数组:

var array_empty = [];
var select1; // values from first select
var select2; // values from second select
array_empty.push( select1 );
array_empty.push( select2 );

类似的东西:-)(从记忆中写作)

$('.select2-elem').each( function(i,e) {
    var values = $(this).val(); // getting selected values each of select element
    array_empty.push( values );

});