【问题标题】:Javascript: Remove different option-tags from a dropdown list depending on another dropdown?Javascript:根据另一个下拉列表从下拉列表中删除不同的选项标签?
【发布时间】:2011-05-02 19:58:43
【问题描述】:

是的,标题是一团糟。

这就是我想要做的: 我有一个主要的下拉列表,我可以在其中进行选择,比如说,两个选项。选项 1 和选项 2。如果选择了 Option1,我不希望发生任何事情。如果选择了 Option2,我想从另一个下拉列表中删除一个选项标签。

<select name="main_dropdown">
    <option value="Option1">Option 1</option>
    <option value="Option2">Option 2</option>
</select>

<select name="secondary_dropdown">
    <option value="Option1">Option 1</option>
    <option value="Option2">Option 2</option> // Let's say i want to remove this option tag if Option2 in main_dropdown is selected.
    <option value="Option2">Option 2</option>
</select>

谢谢!

【问题讨论】:

    标签: javascript select tags option


    【解决方案1】:

    我认为,如果您的问题包括展示您自己尝试寻找答案的代码,而不是要求其他人编写您需要的代码,您会得到更好的回应和更多的关注。不仅仅是因为人们不想让他们觉得自己在做免费工作,而且回答起来也变得更加困难。

    例如,即使您尝试做的是非常基本的 javascript,也有许多不同的方法可以解决它。这是您问题的快速有效答案(使用 jQuery):

    <script>
      $(document).ready(function(){
        $('select[name=main_dropdown]').bind('change',function(){
          if($(this).val() == 'Option2') $('select[name=secondary_dropdown] option[value=Option2]').remove();
        });   
      });
    </script>
    
    <select name="main_dropdown">
        <option value="Option1">Option 1</option>
        <option value="Option2">Option 2</option>
    </select>
    
    <select name="secondary_dropdown">
        <option value="Option1">Option 1</option>
        <option value="Option2">Option 2</option> // Let's say i want to remove this option tag if Option2 in main_dropdown is selected.
        <option value="Option2">Option 2</option>
    </select>
    

    See it in action.

    也就是说,这个解决方案非常脆弱。 在这种情况下,它会做你想做的事,但如果你的关系发生变化,或者代码变得更复杂等,它就不是一个很好的解决方案。没有示例代码,就不可能告诉你什么标准' 用于定位选项并将其删除,因此不可能对您有多大好处。

    我建议从 jQuery 库开始,它有一些很棒的 Tutorials。如果您试一试,您应该能够很快自己解决此类问题。如果您的代码最终无法运行并且您不知道该去哪里,请不要担心——我相信这里的人们会很乐意帮助您。

    【讨论】:

    • 谢谢丹尼尔。下次我会记住这一点,你是对的。我已经知道一些 jQuery,但只知道一些非常基本的东西,比如 fadIn 之类的。不过,这似乎也很基本。我正在构建一个 web-shop-ish 脚本,我必须能够根据用户选择的颜色(以及更多颜色)来更改选项。我还需要能够添加选项,但这可能是最简单的部分。我必须对其进行硬编码,这很糟糕。非常感谢您的帮助。
    • 我该如何做相反的事情?我的意思是,一旦Option 2 被删除,如果我在main_dropdown 中选择Option 1,我希望Option 2 重新出现在secondary_dropdown 中。
    【解决方案2】:
    <option value="Option2" id="ToBeOrNotToBe">Option 2</option>
    

    如果 'main_dropdown' 的值为 "Option2"(进行比较),请使用 .removeChild() 从 "secondary_dropdown" 中删除 document.getElementById("ToBeOrNotToBe") 。我建议为您的所有选择提供一个唯一的 ID 和名称,以便您可以使用 document.getElementById() 来获取您的元素,然后使用 .removeChild() 操作所有内容。您将传递给 removeChild() 的参数将是您的选项 2。

    但是,removeChild() 返回它删除的对象,所以将它存储到另一个变量中,所以如果用户改变了主下拉菜单的想法,appendChild() 将删除的 option2 作为子项返回到“secondary_dropdown”。

    另外,在我看来,首先构建主下拉列表,一旦他们选择了一个值,然后使用 appendChild() 将第二个下拉列表构建到文档本身中。如果您查看,http://www.w3schools.com/tags/tag_option.asp 显示了您可以附加到选项的事件侦听器,因此一旦选择了选项,请在第一个下拉列表下方插入第二个下拉列表,并相应地构建它。

    如果您只想要一个快速简单的解决方案,请使用事件侦听器在主下拉列表中的选项被选中时激活,然后相应地删除选项 2 或附加它。

    【讨论】:

    • 听起来很棒,真的。这正是我的想法。不过,我在这里发布问题的原因是为了获得编码方面的帮助。我有 0% 的 Javascript 知识。也许我应该提到这一点,对不起。所以......任何想法如何实际编码它? :)
    猜你喜欢
    • 2017-01-11
    • 2014-01-12
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多