2013-02-10 71 views
9

我想使用Select2插件有4个相互依赖的下拉列表。我一直在努力寻找正确的方式来更新加载选项的数据。Select2从属下拉列表

我的目标是通过ajax加载新数据,但是一旦我在客户端中加载新数据,我无法将新数据添加到选择列表。

我已经尝试的代码是在这里:

$(#"a3").select2({ 
    placeholder: "select an item", 
    allowClear: true}).on("change", 
    function (e) { 
     var results = $.get("url?id=2", 
      function (data, textStatus, jqXHR) { 
       $(this).select2({ data: { results: data, text: "Name" } }); 
     }); 
    } 
); 

这里有一个问题 select2 changing items dynamically 但解决的办法有与选择二V3.2而不是选择二V3.3

回答

8

伊戈尔已经回来给我一个方法来做到这一点

var data=[...];  
$().select2({data: function() {return {results:data};}});  
/// later  
data=[...something else];  
// next query select2 will use 'something else' data 
+1

太棒了,我一直在寻找这个。一次又一次调用'select2({...})'(因为Knockout)在一些浏览器中导致了大量的内存泄漏。只是告诉你写的东西:如果你试图返回数据,Select2会抛出一个错误。您需要返回数据位于'results'索引中的对象。所以:'return {results:data}' – treeface 2013-04-16 22:30:40

+1

您可以发布一个完整的代码示例吗?我也需要依赖下拉工作与select2 – 2016-01-26 13:35:23

+0

这不适用于我,回调从来没有被称为(Select2 v4) – 2016-08-04 14:29:03

4

正确的格式工作是:

.select2("data", {...}) 
+0

感谢伊戈尔,我发现使用该方法,它试图根据我传入的数据在下拉列表中选择一个项目。 – 2013-02-11 02:47:55

2

对于Select2 v4.x,这里是一个小的js class

使用此选项,select2列表框的选项将由ajax根据另一个select2列表框的选择来加载/刷新。依赖关系可以被链接。

例如 -

new Select2Cascade($('#country'), $('#province'), 'path/to/geocode', {type:"province", parent_id: ''}); 
new Select2Cascade($('#province'), $('#district'), 'path/to/geocode', {type:"district", parent_id: ''}); 

检查codepen演示。这里还有一篇关于how to use的帖子吧。

+0

演示不起作用。 – 2017-09-18 09:41:39