【问题标题】:Adding a custom icon to a selectmenu将自定义图标添加到选择菜单
【发布时间】:2020-01-31 17:12:46
【问题描述】:

我正在使用 JQuery 和 JQuery UI。

我按照 JQuery UI 演示中的示例进行自定义渲染,将图标添加到运行良好的选择菜单项。我遇到的问题是将选定的图标添加到用户单击以显示菜单的按钮中。我遵循了找到here 的公认答案,并且显示了一个图标,但它没有显示我想要的自定义图标,它显示了一个标准图标。我已经为 CSS 尝试了许多不同的变体,并为图标的跨度添加了类,但我做错了。当我在 Chrome 中检查元素时,它总是显示图像是从“ui-button ui-icon”类派生的,而不是我的自定义图标类。我需要什么 CSS 和类的组合才能使其正确显示?

我有一个如下定义的选择菜单:

<select name="sourceIcon" id="jsSourceIconSelect">
     <option value="AM-FM-2" data-class="am-fm">AM-FM</option>
     <option value="CD-2" data-class="cd">CD</option>
     <option value="Climate-2" data-class="climate">Climate</option>
     <option value="Display-Alt-2" data-class="display-alt">Display Alt</option>
     <option value="Display-2" data-class="display">Display</option>
     <option value="DVR-2" data-class="dvr">DVR</option>
     <option value="Energy Management-2" data-class="energy-management">Energy Management</option>
     <option value="Favorites-2" data-class="favorites">Favorites</option>
     <option value="Film Reel-2" data-class="film-reel">Film Reel</option>
     <option value="Home-2" data-class="home">Home</option>
</select>

以及相关的javascript:

$.widget("custom.iconselectmenu", $.ui.selectmenu, {
            _renderItem: function(ul, item) {
                var li = $("<li>"),
                wrapper = $("<div>",{text: item.label});

                if(item.disabled){
                    li.addClass("ui-state-disabled");
                }

                $("<span>",  {
                    style: item.element.attr("data-style"),
                    "class":"ui-icon " + item.element.attr("data-class")
                }).appendTo(wrapper);

                return li.append(wrapper).appendTo(ul);
            }
        });

        $("#jsSourceIconSelect").iconselectmenu({
            select: function(event, ui){
                $("#" + this.id + "ImgSelected").attr("class","ui-icon" + ui.item.element.data("class"));
            },
            create: function(event, ui){
                var widget=$(this).iconselectmenu("widget");
                $span = $('<span id="' + this.id + 'ImgSelected" class="ui-icon ' + $(this).children(":first").data("class") +'">').appendTo(widget);
            }
        })
        .iconselectmenu("menuWidget")
            .addClass("ui-menu-icons customicons");

以及相关的css:

.ui-selectmenu-menu .ui-menu.customicons .ui-menu-item-wrapper{
        padding: .5em 0 .5em 3em;
    }

    .ui-selectmenu-menu .ui-menu.customicons .ui-menu-item .ui-icon{
        background-image: url("ui-icons-largeicons.png");
        height: 32px;
        width: 32px;
        top: .1em;
    }

编辑:认为我应该为一些图标添加 css:

.ui-icon.am-fm{ background-position: 0 0; }
.ui-icon.cd{ background-position: -32px 0; }
.ui-icon.climate{ background-position: -64px 0; }
.ui-icon.display-alt{ background-position: -96px 0;}
.ui-icon.display{ background-position: -128px 0;}
.ui-icon.dvr{background-position: -160px 0;}
.ui-icon.energy-management{ background-position: -192px 0;}
.ui-icon.favorites{background-position: -224px 0;}
.ui-icon.film-reel{background-position: -256px 0;}
.ui-icon.home{background-position: -288px 0;}

【问题讨论】:

    标签: javascript jquery html css jquery-ui-selectmenu


    【解决方案1】:

    我在选择菜单中处理自定义图标的方式是将位置-x、位置-y 更改为正常设置,因为这是未显示图像的原因。 我刚刚做了以下css:

    .ui-icon {
            background-image: url("/Images/dropdown-icon_2018-10-03/dropdown-icon.png");
            background-position-x: 0;
            background-position-y: 5px;
        }
    

    【讨论】:

      【解决方案2】:

      使用选择菜单示例作为 OP 我想出了以下解决方案:

      $(function () {
          $.widget("custom.iconselectmenu", $.ui.selectmenu, {
              _renderItem: function (ul, item) {
                  var li = $("<li>"),
                      wrapper = $("<div>", { html: item.element.html() });
      
                  if (item.disabled) {
                      li.addClass("ui-state-disabled");
                  }
      
                  $("<span>", {
                      style: item.element.attr("data-style"),
                      "class": "ui-icon " + item.element.attr("data-class")
                  })
                      .appendTo(wrapper);
      
                  return li.append(wrapper).appendTo(ul);
              }
          });
      
          $("#people")
              .iconselectmenu({
                  create: function (event, ui) {
                      var widget = $(this).iconselectmenu("widget");
                      $span = $('<span id="' + this.id + 'selected" class="avatar-selected"> ').html("&nbsp;").appendTo(widget);
                      $span.attr("style", $(this).children(":first").data("style"));
                  },
                  change: function (event, ui) {
                      $("#" + this.id + 'selected').attr("style", ui.item.element.data("style"));
                  }
              })
              .iconselectmenu("menuWidget")
              .addClass("ui-menu-icons avatar");
      });
      

      和相应的CSS:

          .ui-selectmenu-menu .ui-menu.avatar .ui-menu-item-wrapper {
              padding: 2px 10px 0 30px;
          }
      
          .ui-selectmenu-menu .ui-menu.avatar .ui-menu-item .ui-icon {
              height: 24px;
              width: 24px;
              top: 0.1em;
          }
      
          .ui-selectmenu-text {
              padding-left: 2em;
          }
      
          .avatar-selected {
              position:absolute;
              height: 24px;
              width: 24px;
              right:auto;
              margin-top:-12px;
              top:50%;
              background-repeat:no-repeat;
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-24
        • 2012-09-16
        • 2020-11-14
        • 2020-11-24
        • 1970-01-01
        • 2015-01-28
        • 1970-01-01
        相关资源
        最近更新 更多