【问题标题】:Get multi dimensional array on dynamically created select2 multi select在动态创建的select2多选上获取多维数组
【发布时间】:2017-11-28 21:45:45
【问题描述】:

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

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();
 });

【问题讨论】:

    标签: javascript jquery arrays


    【解决方案1】:

    您需要一个数组,如下所示:

    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 );
    
    });
    

    【讨论】:

    • 这就是我卡住的地方。如何分隔选定的框并分别获取值?
    • 没错。但事实是我正在动态添加 select2 div。如何跟踪它们并动态定位它们?
    • 按类例如 - $('.select2-elem').each( function(I,e) { });
    • 我在这里使用每个函数,就像这样 ' $(event.currentTarget).find("option:selected").each(function (i, selected) { values[i] = $(selected ).text(); });'
    • 你能给我看一个完整的例子吗?我被困了大约5天!至少尝试了6-8种以上的方法。没有任何效果。我正在考虑放置一些索引并定位它们,但它看起来很笨拙,我还不知道如何实现它。
    猜你喜欢
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    • 2017-12-10
    相关资源
    最近更新 更多