【问题标题】:Use side by side buttons instead of drop down使用并排按钮而不是下拉按钮
【发布时间】:2016-03-04 05:42:50
【问题描述】:

是否可以将带有三个选项的下拉菜单替换为三个并排按钮?我在网上四处寻找,似乎找不到类似的东西。

以下是我目前的设置。

这就是我想要替换下拉菜单的内容。 (引导按钮组)

这是当前的下拉代码。

  <div class="dropdown">

    <select id="selectMe">
        <option value="iPhone">iPhone</option>
        <option value="iPad">iPad</option>
        <option value="Samsung">Samsung</option>
    </select>




</div>

任何帮助将不胜感激。乔什。

然后将该选项传递给一段 java 脚本,这是我在简单地切换两者时遇到的麻烦。

<script type="text/javascript">

$(document).ready(function () {
$('.group').hide();
$('#iPhone').show();
$('#selectMe').change(function () {
$('.group').hide();
$('#'+$(this).val()).show();
})
});


</script>

【问题讨论】:

  • 你现在有什么?答案可能是肯定的,但我们需要看看你有什么,你想完成什么(我没有投反对票)
  • 您应该发布您拥有的代码和您尝试过的尝试。这样一来,在这里得到一些帮助就会容易得多。
  • 感谢@cale_b 提供反馈,而不是像大多数人一样只点击否决票按钮。我已经用我当前的设置修改了我的问题
  • 写个动态js的东西,等一下
  • 谢谢你我期待看到它

标签: jquery html css


【解决方案1】:

当然,静态的,使用少量的 JS……但这实际上只是创建一个单选按钮列表来代替你的 DDL,然后放置你自己的按钮,通过 JS 映射到它们(提示:利用 .previousElementSibling.checked)-或者,更好的是,您自己的“按钮”实际上只是labels 的样式,看起来 像按钮,并且完全不需要 JS。我会把这个解决方案留给其他人来写,因为,或者......

当然,动态地,使用 -native- JS。需要触摸 DOM,但如果您害怕触摸 DOM,请注意,。

此特定实现的问题...
- 会在不支持dataset (caniuse) 的浏览器中中断。要解决此问题,只需将按钮上硬编码的onclick 中的dataset 替换为等效的.getAttribute() 调用
- 如果其他东西在运行后在 ddls 下添加一个元素,则会中断
- 手动创建 btns 和无线电,而不是通过 document.createElement
- 将 onclick 事件硬编码到按钮中,而不是作为适当的事件触发器
- 在name 属性中保留 2 个类名(调用、包装器)和一个伪命名空间
- 如果您可以将下拉列表转换为实际 HTML 中的单选按钮列表,而不是通过 javascript 进行,那么这有点没有意义,因为您应该这样做。

小提琴:https://jsfiddle.net/cxbandh2/1/

Javascript:

(function(){
    //config
    var ddl_to_btns_class = 'ddl2btns';
    var wrapper_div_class = 'ddl2btn-wrapper';
    var radio_btn_name_prefix = '_ddl2btns$';

    //Personal pseudo-library functions
    //getElementByID
    function $(s, d) { return (d || document).getElementById(s); }
    //getElementsByClassName
    function $$(s, d) { return (d || document).getElementsByClassName(s); }
    //inserts an element as a younger sibling
    $.youngerSib = function (ele, sib) { ele.parentNode.insertBefore(sib, ele.nextSibling); }

    var ddls = $$(ddl_to_btns_class);
    for(var i = ddls.length>>>0; i--;){
        //generate our button list
        var optcnt = ddls[i].options.length >>> 0;
        var btns = new Array(optcnt);
        for(var j = optcnt; j--;){
            btns[j] = "<input type='radio' disabled hidden name='" + radio_btn_name_prefix + i +"' /><button type='button' data-ddlv='" + j + "' onclick='this.previousElementSibling.checked = true; this.parentElement.previousElementSibling.selectedIndex = parseInt(this.dataset.ddlv);'>" + ddls[i].options[j].text + "</button>";
        }

        //generate "widget"
        var wrapper = document.createElement("div");
        wrapper.className = ddl_to_btns_wrapper_class;
        wrapper.innerHTML = btns.join('');

        //insert widget & hide ddl
        $.youngerSib(ddls[i], wrapper);
        ddls[i].hidden = true;
    }
})();

示例 HTML:

<select class="ddl2btns">
    <option>dog</option>
    <option>cat</option>
    <option>lizard</option>
</select>

示例 CSS:

.ddl2btn-wrapper > input:checked + button{
    background-color:#aaf;
}

【讨论】:

    【解决方案2】:

    ,当前的 html 不可能有并排按钮。因为无法设置 option 标签的样式。它由操作系统呈现。 refer here.

    除了background-colorcolor,样式设置通过 选项元素的样式对象被忽略。

    虽然可以编辑 html。然后你会按照引导程序的建议进行更改,它会正常工作:)

    【讨论】:

    • 不能吗?一点也不像真的。隐藏 ddl 并使用 js 创建按钮列表并将按钮映射到所需的 ddl 值。我建议使用 js 进行隐藏,因为 noscript 会使页面无法使用。唯一不能用选项做的事情是在不使用 js 的情况下根据下拉列表中的选定值设置样式。这是因为我们没有一个父选择器是 CSS3。有传言说 CSS4 会有一个。
    • 哦,如果您需要粘性按钮,请隐藏每个按钮前面的链接单选框并使用.stickyRad + button(或类似的东西)来设置样式。奖励,您只需在按钮上的 onclick 中添加 this.previousElementSibling.checked = true;
    • 选项和值以 HTML 格式提供,但在 css 中不可用。因此,如果您要使用 js,则可以重新渲染整个该死的东西 :D 但是使用相同的 html(js 不接触 DOM),不可能显示选项信息。还有父选择器,它已经有一段时间没有提出来了。让我们一起期待吧
    • 您是否有机会在线为我指出正确的方向或发布一些示例代码?因为不明白该怎么做
    • @abluejelly 如果你正在编辑 DOM,你可以直接在 HTML 中进行,而不是编写不同的 HTML 然后使用 js 修改它
    【解决方案3】:

    绝对有可能。仅使用引导程序。我不确定你现在使用的是什么,但我可以给你一些很好的建议来开始..
    如果您现在对引导程序不太了解,请不要担心。练习一段时间后很容易上手。稍微阅读一下,如果需要,下载引导模板,或者在 VS 中启动一个空白应用程序(当然带有引导插件)并开始破解。

    这里有几个链接可以帮助您入门。
    Tutorial Republic guys are good
    Here's another good link I used when I was getting started with BS

    希望这会有所帮助!

    【讨论】:

    • 错误的是它只能在 Bootstrap 中实现。如果你不害怕 DOM,你可以通过 JS 在页面上动态完成。
    猜你喜欢
    • 2018-03-25
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 2018-07-26
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多