在特定下拉列表中选择时,从所有其他选定的多个下拉列表中删除选项

时间:2015-05-27 07:21:38

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

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

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

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

当我以前在JavaScript部分编写代码时,Firebug用于触发声明function add_mitigator() isn't defined的错误。 但是当我在HTML部分中编写相同内容时,它运行没有问题。我对JS Fiddle并不熟悉。如何在小提琴中以function_name()格式编写函数?

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

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

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分: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/