【问题标题】:show/hide dropdown items based on previous dropdown selection根据先前的下拉选择显示/隐藏下拉项目
【发布时间】:2010-01-12 10:30:13
【问题描述】:

- - 按照我第一次错误的描述进行了编辑,抱歉! - -

嗨,

我正在尝试使用显示/隐藏来根据在第一个下拉菜单中选择的内容来操纵第二个下拉菜单中显示的内容。然而,在它短暂工作之后,它现在不会跨任何浏览器,无论选择什么,它都只会显示它们。 在第一个菜单中选择一个选项后,它需要在第二个菜单中显示特定选项。 每个机场都有自己的一组目的地。不幸的是,这里没有 php/mysql 数据库选项:/

js如下:

$(document).ready(function(){

$("#from_BLANK").click(function () {
        $("#to_A1").show();
        $("#to_A2").show();
        $("#to_A3").show();
    });
    $("#from_A1").click(function () {
        $("#to_A1").hide();
        $("#to_A2").show();
        $("#to_A3").show();
    });
    $("#from_A2").click(function () {
        $("#to_A1").show();
        $("#to_A2").hide();
        $("#to_A3").show();
    });
    $("#from_A3").click(function () {
        $("#to_A1").show();
        $("#to_A2").show();
        $("#to_A3").hide();
    });
});

并且下拉列表上的html如下:

<select name="depApt" id="depApt">
    <option id="from_BLANK" selected="selected">&nbsp;</option>
    <option id="from_A1" value="A1">Airport One</option>
    <option id="from_A2" value="A2">Airport Two</option>
    <option id="from_A3" value="A3">Airport Three</option>
</select>

<select name="dstApt" id="dstApt">
    <option id="to_BLANK" selected="selected">&nbsp;</option>
    <option id="to_A1" value="A1">Airport One</option>
    <option id="to_A2" value="A2">Airport Two</option>
    <option id="to_A3" value="A3">Airport Three</option>
</select>

有明显的错误吗?或者更好的方法来实现这一点?

非常感谢任何和所有帮助!

干杯, 保罗

【问题讨论】:

    标签: jquery jquery-selectors


    【解决方案1】:

    这是防止两个下拉列表相同的脚本,除了两者都是空白的。如果选择了 A 中的相应选项,则 B 中的选项将始终被禁用。

    在 IE8 和 FF3.5 和 Chrome 中测试。

    Javascript:

     <script type="text/javascript" >
        $(function() {
        $('#depApt').click(function(){
            var idx = $(this).attr("selectedIndex") + 1;
            $('#dstApt option').removeAttr('disabled');
            if($('#dstApt').attr("selectedIndex") == idx - 1)
              $('#dstApt').attr("selectedIndex", 0)
            $('#dstApt option:nth-child(' + idx + ')').attr('disabled', 'disabled');
          }
        );
        });
      </script>
    

    HTML:

    <select name="depApt" id="depApt">
      <option>&nbsp;</option>
      <option value="A1">Airport One</option>
      <option value="A2">Airport Two</option>
      <option value="A3">Airport Three</option>
    </select>
    
    <select name="dstApt" id="dstApt">
      <option>&nbsp;</option>
      <option value="A1">Airport One</option>
      <option value="A2">Airport Two</option>
      <option value="A3">Airport Three</option>
    </select>
    

    PS:我已经删除了所有选项的 ID,因为我的代码不需要它们,如果需要,将其恢复。

    【讨论】:

    • 效果很好!虽然它现在在描述中突出显示了我的错误:(这不是我需要隐藏该选项,而是在第一个框中选择一个机场需要然后在第二个框中显示特定选项!填满我的第一篇文章的好方法在这里:(
    • 隐藏选项不适用于所有浏览器,禁用它们会。至于您实际的完整要求,我的方法只有在您将所有可能的选项放入其中然后使用您自己的规则来禁用/启用它们时才有效。可以肯定的一件事是,您可以往返于同一个地方。 :)
    【解决方案2】:

    看看我对类似问题的回答:

    Removing and adding options from a group of select menus with jQuery

    它应该非常适合你,我还在最后提供了一个工作示例的链接。

    【讨论】:

    • Thank you :) will that still work when the option values are just text and not integers?我不能像你那样做 val > 0 :/
    • @Paul S,是的,该方法可行,您只需稍微调整逻辑即可。您可以使用val != 'to_BLANK',而不是val &gt; 0
    猜你喜欢
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 2017-10-06
    • 2020-12-02
    • 1970-01-01
    相关资源
    最近更新 更多