多选框's使用Chosen具有相同的值
Multiple selectbox's with same values using Chosen
有没有一种方法可以使用Chosen插件或Select2创建多个具有相同值的selectbox。
条件:
- 所有的选择框都应该具有相同的值
- 单选框
- 不能在所有选择框中选择两次选项(例如:A、 B,C。。是选项,其中A只能选择一次)
- 在选择框中添加自定义值的选项,该选项更新为所有选择框
- 所选值在选择框的其余部分中被禁用
因此,这里有几个问题,我将单独回答所有问题。请注意,我是Select2的维护者,所以我的所有答案都是针对Select2的有些人会将应用于Chosen,但我不能保证。
完整的代码在这个答案的底部,作为一个完整的可运行的堆栈代码段。问题下方会包含个别片段(如有)。
- 所有的选择框都应该具有相同的值
这是在没有Select2或Chosen的情况下应该能够做到的,因为这都是将一个<select>
的内容克隆到其他内容的问题。这可以像一样简单
$("select").html($(".main-select").html());
这将确保所有<select>
框与类别为main-select
的框具有相同的选项。
- 单选框
Select2和Chosen根据是否在<select>
上指定multiple
属性来确定是否允许多选。因此,这里的简单解决方案是永远不要包含它,并且所有的选择框都只允许进行一次选择。
- 选项不能在所有选择框中选择两次(例如:A、B、C.是选项,其中A只能选择一次)
这个更难,实现将完全取决于每个插件如何实时处理禁用选项。当<select>
的值更改时,两个插件都会触发change
事件,因此您可以检测何时选择了新选项,并在其他<select>
框中禁用它。这两个插件都通过检查<option>
上的disabled
属性来确定是否可以选择一个选项,就像浏览器一样,所以你会想要使用它。
这里的技巧是检测新选择的选项的value
,并禁用其他<select>
框中具有相同值的所有其他<option>
元素。
$select2.find("option:not(:selected)").filter(function () {
return this.value == val;
}).prop("disabled", true);
请注意,由于Select2中的当前错误,您需要在这些<option>
元素上调用removeData("data")
,以清除该元素的缓存数据。
- 在选择框中添加自定义值的选项,该选项将更新为所有选择框的
Select2允许您在初始化Select2时通过设置tags: true
来启用自定义值。Chosen没有添加自定义值的能力,因此这可能会破坏交易。
- 所选值在选择框的其余部分中被禁用
这在求解3时解决。
var $select2 = $(".select2");
// Copy the options to all selects based on the first one
$("select").html($select2.first().html());
// Initialize Select2
$select2.select2({
allowClear: true,
placeholder: "Select an option",
tags: true
});
// Handle disabling already-selected options
$select2.on("change", function () {
$select2.find("option:disabled").prop("disabled", false).removeData("data");
$select2.each(function () {
var val = $(this).val();
$select2.find("option:not(:selected)").filter(function () {
return this.value == val;
}).prop("disabled", true).removeData("data");
});
});
body { margin: 0; }
.select2 { width: 200px; }
<link href="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.1/css/select2.css" rel="stylesheet"/>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.1/js/select2.js"></script>
<select class="select2">
<option></option>
<option value="AL">Alabama</option>
<option value="AK">Alaska</option>
<option value="AZ">Arizona</option>
</select>
<select class="select2"></select>
<select class="select2"></select>
<select class="select2"></select>
- 在指令控制器中使用$attrs时出现问题
- 如何使用jQuery自动打开页面上的所有链接
- 如何使用url加载程序在webpack中导入多个图像
- 使用php或javascript从facebook相册URL中删除多余的部分
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何使用jquery在填充自动完成的值后使文本框只读
- 使用agility.js进行页面布局和合成
- 使用Clipboard.js复制span文本
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 使用chosen.js,如何将图像添加到下拉项中
- 如何使用Chosen.JS多选以编程方式选择多个选项
- 为JQuery Chosen使用示例代码时出现语法错误
- 多选框's使用Chosen具有相同的值
- Chosen.js没有'不能很好地使用Angular指令
- 使用Chosen插件更改选择中的选择
- 如何使用chosen.js从下拉列表中获得选定的值
- 当我使用data-rel="chosen"json ajax数据不绑定下拉列表
- 使用Angular更新jQuery Chosen选定的值
- 使用Javascript(appscript-UI工作流)chosen.js设置表单选项值
- 使用Chosen.js搜索国际字符