Select2动态数据设置

Posted

技术标签:

【中文标题】Select2动态数据设置【英文标题】:Select2 dynamic data setting 【发布时间】:2013-02-04 04:00:58 【问题描述】:

我正在尝试将 select2 与 jQuery 1.9.1 和 select2 3.3.0 一起使用来实现我想象的一个相当基本的用例...我想使用基于另一个 select2 控件状态的选项填充一个 select2 控件.

我有以下几点:

<div>
  <select id="master" name="master">
    <option value=1>a</option>
    <option value=2>b</option>
  </select>
</div>
<div>
  <input type="hidden" id="detail" name="detail" data-placeholder="No options until master chosen">
  </select>

<script src="jquery-1.9.1.js"></script>
<script src="select2-3.3.0/select2.js"></script>
<script>
var a = [];
var b = [];
for (var i = 0; i < 20; i++) 
  a.push(id: i, text: "a" + i);
  b.push(id: i, text: "b"+ i);


$(document).ready( function () 
  $("#master").select2().on('change', function() 
    console.log("master changed: " + $("#master").val())
    var right_one = a;
    if($("#master").val() == 2) right_one = b;
    $("#detail").removeClass('select2-offscreen').select2(data:right_one)
    console.log("right_one: " + right_one)
  )


)

编辑: This answer 显示控件消失的原因。我对此实施仍有疑问:

    如何让#master没有有初始选择? 如何更改#detail 中的占位符文本,使其 回应主人已被选择的事实?

【问题讨论】:

【参考方案1】:

第二个选择#detail 将不再起作用,您只能单击选项,但如果您尝试输入几个字符,您会看到发生了什么。

【讨论】:

【参考方案2】:

也许是这样的:

<script>
var a = [];
var b = [];
for (var i = 0; i < 20; i++) 
  a.push(id: i, text: "a" + i);
  b.push(id: i, text: "b"+ i);


$(document).ready( function () 
    //set up default data, should work without one too
    $('#detail').data('select2_values', []);
    $('#detail').select2(
        allowClear: true,
        width: '150px',
        placeholder: 'No options until master chosen',
        query: function (query) 
            var data = results: [];
            if (query.term == '')
            
                data.results = $('#detail').data('select2_values');
            
            query.callback(data);
        ,
        initSelection : function (element, callback) 
            var data = $(element).data('select2_values');
            if (typeof(data)!='object') data = [];
            callback(data);
        ,
        data: $(this).data('select2_values')
    ).select2('disable');
    $('#master').select2(
        allowClear: true,
        width: '150px'
    ).on("change", function(e) 
        var right_one = a;
        if ($('#master').select2('val') == 2) right_one = b;
        $("#detail").data('select2_values', right_one);

        //Remove previous value if any
            $("#detail").select2('val','');

        //If you want to select some vaoue you can use next line
        //$("#detail").select2('data', right_one[0]);

        //Enable 2nd box
        $("#detail").select2('enable');
    );
);

</script>

在 chrome+win32 上测试

【讨论】:

以上是关于Select2动态数据设置的主要内容,如果未能解决你的问题,请参考以下文章

实现select2与jqGrid联动动态重新加载数据

实现select2与jqGrid联动动态重新加载数据

为 Vue Select2 包装器组件使用动态 AJAX URL

动态填充 select2 下拉列表

select2-jquery:如何动态设置最大选择大小

[工具]select2与jqGrid联动动态重新加载数据