使用select2来设置3个依赖的下拉列表会对我的项目造成很大的麻烦。
用例:有3个下拉列表:A,B和C.C可以单独选择,A必须具有非默认值B,反之亦然。
在没有select2的情况下执行此操作非常简单,但使用.select2("val"
代替普通.val(
标准下拉列表会导致问题,即通过重置下拉列表,它会导致更改" -event,甚至如果实际价值没有变化。
小提琴: http://jsfiddle.net/nmeoosLk/7/
这可能是一个解决方案,但它优雅吗? http://jsfiddle.net/8ozv4nr1/
答案 0 :(得分:0)
这里涉及的一些事情对我们来说很有用。
首先,.select2("val", xyz)
is equivalent to .val(xyz).trigger("change")
。触发change
事件的原因有两个原因
change
事件,因此我们提供了一个简单的升级路径。change
事件,以了解<select>
的值何时发生变化,因此触发它是有意义的。其次,如果您触发<select>
事件,则Select2只能知道change
的基础值是否会发生变化。
因此,当您将这两个问题结合在一起时,它就会开始解释为什么当您在change
事件中设置新值时,Select2不会像您期望的那样行事。
您可以使用change
事件来确定何时进行新选择,而不是select2:select
事件,从而绕过循环change
事件。
https://jsfiddle.net/nmeoosLk/8/
这会锁定您使用特定于Select2的事件,但如果您不想总是检查值是否已更改,则它是您的最佳选择。如果值没有改变,我个人建议不要触发change
事件,因为少量代码会更好地帮助其他组件了解页面上发生的事情。
答案 1 :(得分:0)
当您使用Select2 v4时,这是一个通用代码片段,用于进行级联/依赖下拉列表。并且可以链接依赖关系。
使用此模块,selecta列表框的选项将由ajax 加载/刷新,具体取决于另一个select2列表框的选择。
https://gist.github.com/ajaxray/187e7c9a00666a7ffff52a8a69b8bf31
例如 -
new Select2Cascade($('#country'), $('#province'), 'path/to/geocode', {type:"province", parent_id: ''});
new Select2Cascade($('#province'), $('#district'), 'path/to/geocode', {type:"district", parent_id: ''});
在调用ajax之前,父select2列表框的选定值将设置为数据对象的parent_id
。