【问题标题】:Is it possible to convert a select menu to buttons?是否可以将选择菜单转换为按钮?
【发布时间】:2013-09-21 10:38:22
【问题描述】:

我有一个简单的选择菜单,例如

<p>Would you recommend this company?</p>

<select>
    <option value="yes">Yes</option>
    <option value="no">No</option>
</select>

我要求用户反馈,它目前是通过一个简单的表单提交来实现的,现在是 2013 年,我很想把它做成 2 x 按钮,例如“拇指向上”或“拇指向下”(选中时会突出显示)/可互换(例如,不能一次选择 2 个)。

到此为止......但它并没有真正应用选择值或“选择”效果:

http://jsfiddle.net/mBUgc/18/

我最接近的是以下...它将选择菜单转换为星级... - 但它并不是真正可用的,所以希望有人可以帮助/指出正确的方向或一个小代码示例。

http://netboy.pl/demo/jquery-bar-rating/examples/

【问题讨论】:

    标签: jquery html-select


    【解决方案1】:

    更新

    为所选值的表单提交添加了隐藏元素。

    http://jsfiddle.net/mBUgc/21/


    这是您想要实现的目标的简单实现。

    演示http://jsfiddle.net/mBUgc/19/

    JavaScript

    $("select option").unwrap().each(function() {
        var btn = $('<div class="btn">'+$(this).text()+'</div>');
        if($(this).is(':checked')) btn.addClass('on');
        $(this).replaceWith(btn);
    });
    
    $(document).on('click', '.btn', function() {
        $('.btn').removeClass('on');
        $(this).addClass('on');
    });
    

    CSS

    div.btn {
        display: inline-block;
        /** other styles **/
    }
    div.btn.on {
        background-color: #777;
        color: white;
        /** styles as needed for on state **/
    }
    

    注意:无论您选择的选项有多少,这都会起作用 - http://jsfiddle.net/mBUgc/20/

    【讨论】:

    • 感谢您的回复,我想知道,使用 Firebug 检查代码 - 在提交表单时,这仍然会传递选择选项值,还是只是用按钮替换了选择? - 我认为我们在这里取得了胜利。
    • 你的怀疑是对的。这不会在表单提交上传递任何值。为此,我们需要添加一个包含该值的隐藏元素,并在单击任何选项时用适当的值填充它。
    • 这对我来说看起来很棒,嘿,我想衷心感谢您今天抽出时间帮助我,非常感谢。
    • 接受。很高兴它有帮助。 :)
    • 似乎有错误,如果选项包含“selected”参数,那么不仅这个选项被标记为选中,而且下一个选项也被标记为选中 - jsfiddle.net/tu68dyzz
    【解决方案2】:

    如果有人回到这个问题,我会根据@techfoobar 的示例提出一个稍微不同的解决方案。

    基本上: - 动态代码(可用于同一页面上的多个选择) - 不需要隐藏字段,选择仍然存在(隐藏)

    测试: - 当前 chrome, firefox, edge (chromium), ie11

    用法:

    jQuery(document).ready(function($) {
      ReplaceSelectWithButtons($('#test'));
    });
    

    https://jsfiddle.net/koshimon/pobcvxf4/2/

    // 是的,这是我在这里的第一篇文章,欢迎反馈:)

    【讨论】:

    • 你应该在这里粘贴整个函数。除此之外,这个解决方案效果很好!
    【解决方案3】:

    你不需要 jQuery 来做这件事。 有一个非常简单的解决方案。
    这段代码 sn-p 仅使用输入和标签标签,我们隐藏单选按钮圆圈并使用按钮代替

    <input type="radio" name="name_name" id="id_name" value="1" style="visibility: hidden;">
    <label class="btn btn-primary" for="id_name">1</label>
    <input type="radio" name="name_name" id="id_name2" value="2" style="visibility: hidden;">
    <label class="btn btn-primary" for="id_name2">2</label>
    

    input[type=radio]:checked + label {
      font-style: normal;
      color: rgb(56,110,246);
      border: 1px solid rgb(56,110,246);
      background-color: rgb(226,233,253)
    }
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet" />
    <input type="radio" name="name_name" id="id_name" value="1" style="visibility: hidden;">
    <label class="btn btn-secondary" for="id_name" style="border: 1px solid grey;">1</label>
    <input type="radio" name="name_name" id="id_name2" value="2" style="visibility: hidden;">
    <label class="btn btn-secondary" for="id_name2" style="border: 1px solid grey;">2</label>

    【讨论】:

    • 这太棒了!我在标签上使用了我自己的样式(而不是 Boostrap btn)这个技巧。此外,我将所有样式都放在 CSS 文件中,而不是像这里显示的那样内联(这是重复的!)。它也适用于表单提交(与接受的答案不同,它没有任何逻辑来确保表单有效,这使得它完全没有意义!)。只需确保正确使用相同的名称和不同的 ID,并确保在标签和相应的收音机中放入相同的 ID。顺便说一句,如果您想完全消除收音机对页面布局的影响,请改用display: none
    猜你喜欢
    • 2011-01-03
    • 1970-01-01
    • 2012-09-04
    • 2012-11-29
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    相关资源
    最近更新 更多