【问题标题】:disable dropdown options based on the previously selected dropdown values using jquery or javascript?根据先前使用 jquery 或 javascript 选择的下拉值禁用下拉选项?
【发布时间】:2016-01-13 11:10:57
【问题描述】:

我有三个具有相同选项的下拉菜单。我想要的是,当我从下拉列表中选择一个选项时,其他两个下拉列表中的相同选项将被禁用,除了第一个(选项“选择一个”)。

为此,我使用以下逻辑,但在这里,当一个下拉列表被选择为一个值而不是从其余两个下拉列表中禁用该选定值时,它会从所有这三个下拉列表中禁用,这是我不想要的。值的禁用应该发生在其余的值上,但不会发生在当前的下拉列表中。

我该怎么做?

<select class="form-control positionTypes">
    <option value="">Select One</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
</select>

<select class="form-control positionTypes">
    <option value="">Select One</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
</select>

<select class="form-control positionTypes">
    <option value="">Select One</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
</select>
$("select.positionTypes").change(function () {
    $("select.positionTypes option[value='" + $(this).data('index') + "']").prop('disabled', false);
    $(this).data('index', this.value);
    $("select.positionTypes option[value='" + this.value + "']:not([value=''])").prop('disabled', true);
});

这里是小提琴链接https://jsfiddle.net/3pfo1d1f/4/

【问题讨论】:

    标签: javascript jquery html drop-down-menu disabled-input


    【解决方案1】:

    有一种简单的方法可以做到这一点。您可以通过简单的逻辑实现相同的目标,即使对于初学者来说也很容易理解。

    工作原理:

    • 重置之前在其他dropdowns 上所做的所有选择
    • 禁用所有dropdowns 上的选定选项,当前下拉列表除外。

    JQUERY 代码:

    $(function () {
        $(".positionTypes").on('change', function () {
            var selectedValue = $(this).val();
            var otherDropdowns = $('.positionTypes').not(this);
            otherDropdowns.find('option').prop('disabled', false); //reset all previous selection
            otherDropdowns.find('option[value=' + selectedValue + ']').prop('disabled', true);
        });
    });
    

    Live Demo @ JSFiddle

    【讨论】:

    • 嗨@dreamweiver,我有类似的东西,但是下拉菜单在表格内,你可以告诉我如何在包含下拉菜单的HTML表格中做同样的事情在第二栏,我发布了一个问题
    • 嗨,这很好用,但是如何在 $this.selected DDL 上禁用来自other dll selected options 的值 - 您的代码中没有禁用当前值
    • 我们如何才能同时禁用current $this 上的其他选择?
    • @transformer:如果您想禁用所有下拉菜单的选项,包括当前下拉菜单,请评论此行,//var otherDropdowns = $('.positionTypes').not(this);
    • 嗨@dreamweiver 注释掉//var otherDropdowns.. 删除了定义,我得到Uncaught ReferenceError: otherDropdowns is not defined
    【解决方案2】:

    这样做:https://jsfiddle.net/sandenay/3pfo1d1f/7/

    $("select.positionTypes").change(function () {
        $("select.positionTypes option[value='" + $(this).data('index') + "']").prop('disabled', false); //reset others on change everytime
        $(this).data('index', this.value);
        $("select.positionTypes option[value='" + this.value + "']:not([value=''])").prop('disabled', true);
        $(this).find("option[value='" + this.value + "']:not([value=''])").prop('disabled', false); // Do not apply the logic to the current one
    });
    

    【讨论】:

    • 嗨,我有类似的东西,但是 下拉列表在表格内,您可以向我展示如何在包含下拉列表的 HTML 表格中执行相同操作二楼,我发了一个问题
    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2012-06-11
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多