【问题标题】:Toggling Multiple Select Options Using Anchors使用锚点切换多项选择选项
【发布时间】:2013-09-01 02:56:06
【问题描述】:

我正在寻找一种简单的方法来“总结”(或选择多个)选择中的选项。

我给你一个例子,它会更容易。所以我有:

<select name="test1" id="test_1" multiple="multiple">
  <option value="val1">Value 1</option>
  <option value="val2">Value 2</option>
  <option value="val3">Value 3</option>
</select>

另一方面,我有:

<a href="#form" onclick="document.getElementById('test_1').selectedIndex = 0;">Add to selection</a>
<a href="#form" onclick="document.getElementById('test_1').selectedIndex = 1;">Add to selection</a>
<a href="#form" onclick="document.getElementById('test_1').selectedIndex = 2;">Add to selection</a>

因此,单击这些链接中的每一个都会选择其中的每个选项,而取消选择所有其他选项。

我想要实现的是“总结选项”。这意味着单击链接将切换选项选择,而不是进行绝对选择。因此,如果我单击链接 1,然后单击链接 3,最终结果将同时选择“值 1”和“值 3”选项。如果我再次单击链接 3,它将取消选择“值 3”选项。

我希望它足够清楚以获得一些帮助。我不在乎它是 jQuery 还是 Javascript 解决方案。真的很感激!

【问题讨论】:

    标签: javascript jquery select option


    【解决方案1】:

    您不能为此使用selectedIndex,因为它被定义为第一个 选择&lt;option&gt; 的索引。而是在您想要的 HTMLOptionElements 上设置 selected 属性;

    <select name="test1" id="test_1" multiple="multiple">
        <option value="val1">Value 1</option>
        <option value="val2">Value 2</option>
        <option value="val3">Value 3</option>
    </select>
    
    function select(sel, idx) {
        sel.options[idx].selected = true;
    }
    
    function deselect(sel, idx) {
        sel.options[idx].selected = false;
    }
    
    var elm = document.getElementById('test_1');
    select(elm, 0);   // select each one
    select(elm, 1);
    select(elm, 2);
    deselect(elm, 1); // deselect something
    // only options 0 and 2 left selected
    

    DEMO

    【讨论】:

    • 感谢您的回答保罗。事情是我想通过单击这些链接来更改选项的选定状态。我想实际切换状态,以便我可以通过单击同一链接来选择或取消选择。我试图弄清楚如何但不知道如何实现这一目标。你有什么建议?
    • !true === false, !false === true,所以使用x = !x 模式进行切换。
    【解决方案2】:

    这是一个可以完成这项工作的 jQuery 解决方案。

    HTML:

    <select name="test1" id="test_1" multiple="multiple">
      <option value="val1">Value 1</option>
      <option value="val2">Value 2</option>
      <option value="val3">Value 3</option>
    </select>
    
        <a href="#form" data-val="val1">Add to selection</a>
        <a href="#form" data-val="val2">Add to selection</a>
        <a href="#form" data-val="val3">Add to selection</a>
    

    JavaScript:

    $('a').click(function(ev)
                 {
                     ev.preventDefault();
                     var dataValue = $(this).data('val');
                     var select = $("#test_1 option[value='" + dataValue + "']")[0]; 
                     select.selected = !select.selected;    
                 });
    

    jsFiddle Demo Click Here!

    【讨论】:

    • 太好了,效果很好!我尝试取消注释,但再次单击链接不会切换选择。我怎样才能让它工作?或者,也许我错过了什么?非常感谢
    • 对不起!小错误。固定!
    • 再次感谢您的帮助!对此,我真的非常感激。但是有一个问题,它只能用于选择还是取消选择选项?有没有办法通过单击相同的链接将选项的状态从选中状态“切换”到取消选中状态?
    • 是的,取消注释代码,我更新以使其工作。测试后请采纳答案。
    • 别介意,我只是自己添加的。非常感谢你的帮助。这就是我想要实现的目标,感谢您jsfiddle.net/gallettigr/n4Dyy/2
    【解决方案3】:
        <style>
            .blue {
                width: 200px;
                height: 200px;
                background: mediumslateblue;
                display: none;
            }
    
            .turquaz {
                width: 200px;
                height: 200px;
                background: teal;
            }
        </style>
    

    不要处理任何其他复杂的功能。

    <select class="select">
        <option value="blue">Blue</option>
        <option value="turquaz">Turquaz</option>
    </select>
    
    <div class="blue"></div>
    <div class="turquaz"></div>
    

    和 jQuery

    <script>
        $('.select').change(function () {
            if ($(this).val() == "blue") {
                $('.blue').show();
                $('.turquaz').hide();
            } else if ($(this).val() == "turquaz") {
                $('.blue').hide();
                $('.turquaz').show();
            }
        });
    </script>
    

    您可以使用 slideUp 和 SlideDown 来代替隐藏和显示。

    【讨论】:

    • 这段代码是反模式的。每次添加新颜色时,都必须创建 IF 逻辑来切换正确的状态。还是不相信我?更新您的代码以显示 10 个不同的选项。根据我上面的回答,代码不会增长。然而,这将成倍增长。
    猜你喜欢
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 2021-05-17
    • 2023-03-08
    • 2013-01-18
    相关资源
    最近更新 更多