【问题标题】:Removing an option from all other chosen multiple dropdowns, when selected on a particular dropdown在特定下拉列表中选择时,从所有其他选择的多个下拉列表中删除一个选项
【发布时间】:2015-05-27 07:21:38
【问题描述】:

我在这里附上了一个 JS Fiddle 链接:

http://jsfiddle.net/p0b4j5o8/18/

如果您查看 fiddle 链接,您会看到我在 HTML 部分中编写了 JavaScript/jQuery 代码(一个名为 add_mitigator() 的函数)。

当我以前在 JavaScript 部分编写代码时,Firebug 曾经触发一个错误,指出 function add_mitigator() isn't defined。 但是当我改为在 HTML 部分中编写相同的内容时,它运行起来没有问题。我不太习惯 JS Fiddle。如何在小提琴中编写function_name() 格式的函数?

在我的 JS Fiddle 中,有一个带有选项 1 到 10 的下拉列表(选择多个)。当我单击 add_mitigator 链接时,它会创建/附加一个新的选择下拉列表。

假设我有三个下拉菜单,然后如果我选择2 from dropdown 1,那么其他下拉菜单将从其选项中删除 2。当我从第一个下拉列表中取消选择 2 时,其他两个下拉列表中将再次显示 2。这应该反之亦然。当从任何下拉列表中选择 2 时,它对所有其他下拉列表都不可用。

我怎样才能做到这一点?

【问题讨论】:

  • 请不要过于依赖外部网站。将您的脚本与所有相关信息一起放在这里,并提出一个明确的问题(关于您的问题,而不是关于如何使用其他网站)。也就是说,您的特定问题经常被问到,在问之前您是否在这里对 SO 进行过一些研究?我很确定您会发现很多重复项。
  • @Yoshi,这个特定的问题之前没有被问过......你能说明类似问题的链接吗?
  • 好吧,如果仔细阅读,这部分会突出显示使用的插件“当我单击 add_mitigator 链接时,它会创建/附加一个新选择的下拉列表。”。我通过阅读他的问题设法弄清楚了,当然它可以做得更好,但它完全有效。
  • 我删除了重复的标志。请张贴你的答案。让作者决定吧。
  • 我在标签里明确​​提到,jquery-chosen

标签: javascript jquery drop-down-menu jquery-chosen


【解决方案1】:

通过在选择框更改事件上调用以下函数,将根据您的要求禁用/启用选项。

function disableSelectedValues() {
    var cssOptions = [];
    $(".input_field.criteria_countries option").removeAttr("disabled");
    $.each($(".input_field.criteria_countries"), function(index, select) {
        cssOptions = [];
        var values = $(select).val();
        if (values) {
            for (var i = 0; i < values.length; i++) {
                cssOptions.push("option[value=" + values[i] + "]");
            }
        }
        console.log("test");
        if (cssOptions.length) {
            // disable all options with the selected values
            $(".input_field.criteria_countries " 
+ cssOptions.join(",.input_field.criteria_countries ")).attr("disabled", true);

            // enable all options with the selected values for the current select
            $(select).find(cssOptions.join()).removeAttr("disabled");
        }
    });
}

使用.chosen,您可以使用.chosen().change(); 监听onchange 事件。 在.chosen().change() 事件中,您需要告诉所有选择框在值更改后更新。通过在触发更改事件时在选择框选择器上使用.trigger("chosen:updated");,选择框将更新。

注意,每当您添加选择框以在创建时禁用其选项时,您都需要调用 disableSelectedValues() 函数。

http://jsfiddle.net/p0b4j5o8/22/

【讨论】:

  • @JaskoBasson 兄弟,你的答案很漂亮......但是有一个小故障......说我之前有 drop 1,然后我添加了一个新的 drop2 ..我选择 2 from来自 drop2 的 drop1 和 3。现在我点击添加 mitigator.. 将创建一个新的 drop3,但是 2 和 3 仍然可以从这个新的 drop3 中选择
  • @Saswat 更新了小提琴jsfiddle.net/p0b4j5o8/22 现在应该没问题了。您还需要在添加新选择时调用该函数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-10
  • 1970-01-01
相关资源
最近更新 更多