【问题标题】:Change value title of a converted dropdown to radio buttons将转换后的下拉列表的值标题更改为单选按钮
【发布时间】:2022-02-13 19:20:31
【问题描述】:

我正在使用以下脚本 (jsfiddle) 将下拉列表转换为按钮选择。但它显示来自选项的value 的按钮文本。

有没有办法改变每个按钮显示的文本,而不改变按钮的值?喜欢给它一个id (getElementById) 还是什么?所以新按钮是这样的:Option 1Option 2.. 等等。

当前代码:

// http://stackoverflow.com/questions/3975331/update-drop-down-selection-with-radio-button-selection-using-jquery
// http://jsfiddle.net/ChinmayeeG/TkGP8/
$(function () {

  $('.radioSelect').each(function (selectIndex, selectElement) {

    var select = $(selectElement);
    var container = $("<div class='radioSelectContainer' />");
    select.parent().append(container);
    container.append(select);

    select.find('option').each(function (optionIndex, optionElement) {
      var radioGroup = select.attr('id') + "Group";
      var label = $("<label />");
      container.append(label);

      $("<input type='radio' name='" + radioGroup + "' />")
          .attr("value", $(this).val())
          //.click((function () { select.val($(this).val()); })) //radio updates select - see optional below
          .appendTo(label);

      $("<span>" + $(this).val() + "</span>").appendTo(label);
    });

    //http://stackoverflow.com/questions/4957207/how-to-check-uncheck-radio-button-on-click
    //optional - this logic handles unchecking when clicking on an already checked radio
    container.find(":radio + span").mousedown(
      function (e) {
        var $span = $(this);
        var $radio = $($span.prev());
        if ($radio.is(':checked')) {
          var uncheck = function() {
            setTimeout(function () { $radio.prop('checked', false); }, 0);
          };
          var unbind = function() {
            $span.unbind('mouseup', up);
          };
          var up = function() {
            uncheck();
            unbind();
          };
          $span.bind('mouseup', up);
          $span.one('mouseout', unbind);
        } else {
          select.val($radio.val());
        }
      }
    );

    select.change((function () { //select updates radio
      $("input[name='" + select.attr('id') + "Group" + "'][value='" + this.value + "']").prop("checked", true);
    }));
  });
});
/* http://jsfiddle.net/496c9/ */
 .radioSelectContainer > select {
     /*display: none;*/
}
.radioSelectContainer > label {
    display: inline-block;
    margin: 0.3em 0.3em 0 0;
    background-color:#EFEFEF;
    border-radius:4px;
    border:1px solid #D0D0D0;
}
.radioSelectContainer > label > span {
    padding:0.2em;
    text-align:center;
    display:block;
}
.radioSelectContainer > label > input {
    position:absolute;
    top:-20px;
}
.radioSelectContainer > label > input:checked + span {
    background-color:#404040;
    color:#F7F7F7;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<select class="radioSelect" id="sizeOptions">
    <option value="S">S</option>
    <option value="M">M</option>
    <option value="L">L</option>
    <option value="XL">XL</option>
    <option value="2XL">2XL</option>
    <option value="3XL">3XL</option>
    <option value="4XL">4XL</option>
</select>

【问题讨论】:

  • 您的选项文本和值是相同的。你希望按钮文本是什么???
  • 另外请使用 jquery 3.6 并将绑定更改为 on 或使用 toggleClass
  • 感谢@mplungjan 的回复。我打算更改更新 jquery,但现在也不是为了在更改后首先查看站点。至于要写的文字,我需要一些不同的东西,比如Option 1Option 2..等等。

标签: javascript html jquery css drop-down-menu


【解决方案1】:

你的意思是这样的

http://jsfiddle.net/mplungjan/2bok3gn1/

const sizes = {"S":"Small","M":"Medium"...."4XL":"Huge"}

$("<span>" + sizes[$(this).val()] + "</span>").appendTo(label);

【讨论】:

  • 所以我将.attr("value", $(this).val()) 替换为.attr("value", sizes[$(this).val()])。但是在哪里添加const sizes = {"S":"Small","M":"Medium","4XL":"Huge"]?你能编辑jsfiddle或代码,或者告诉我在哪里添加它。谢谢。
  • 我试过了,但是按钮消失了:jsfiddle.net/kptagsqo
  • 只需添加一个 br:container.append(select); container.append('&lt;br/&gt;'); - 我没有看到任何跳跃
  • position:absolute; top:-20px; 是问题所在。如何解决它是一个新问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-13
  • 1970-01-01
  • 2015-08-06
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多