Добавление пользовательского значка в меню выбора - PullRequest
0 голосов
/ 03 мая 2018

Я работаю с JQuery & JQuery UI.

Я последовал примеру демонстраций пользовательского интерфейса JQuery для пользовательского рендеринга, чтобы добавить значки к выбранным пунктам меню, которые работают хорошо. У меня проблемы с добавлением выбранного значка к кнопке, которую пользователь нажимает, чтобы отобразить меню. Я следовал принятому ответу, найденному здесь , и у меня есть значок, показывающий, но он не показывает пользовательский значок, который мне нужен, он показывает один из стандартных значков. Я пробовал много разных вариантов CSS и добавлял классы в span для иконки, но я не могу понять это правильно. Когда я проверяю элемент в 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;
    }

edit: думал, что я должен добавить 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;}

1 Ответ

0 голосов
/ 03 октября 2018

То, как я обработал пользовательский значок в selectmenu, - это изменить position-x, position-y на обычные настройки, потому что по этой причине изображение не показывалось. Я только что сделал следующее CSS:

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