Решено .
В документации написано "Вы ДОЛЖНЫ вернуть <li>
Элемент (...)", и я возвращал либо только простую строку, либо объект jQuery.
Чтобы решить эту проблему, необходимо создать <li>
с помощью функции document.createElement
javascript.
tail.select('#my-select',
{
cbLoopItem: function(item, optgroup, search, root)
{
var icon = '<i class="fab fa-amazon"></i>';
var newItem = document.createElement('li');
newItem.innerHTML = icon + item.value; // will create '<li><i class="fab fa-amazon"></i> Value 1</li>'
return newItem;
},
});
Это работает только для элементов в раскрывающемся списке. Контейнер меток не получает значок <i/>
, что означает, что мне нужно использовать обратный вызов cbComplete
и событие change
для достижения конечной цели: всегда показывать значок независимо от того, находится ли он в контейнере или в раскрывающийся список.
cbComplete
необходим, поскольку уже могут быть выбраны параметры (когда инициализируется плагин), и я хотел немедленно отобразить значок.
cbComplete: function(item)
{
var labels = $(item).find('.select-handle');
// might be null (none selected)
if (!labels)
return;
var icon = '<i class="fab fa-amazon"></i>';
$.each(labels, function(i, label)
{
var key = $(label).attr('data-key');
var text = $(label).text();
var originalLi = $(item).find('.dropdown-inner').find('[data-key="' + key + '"]'); // must always exists
$(label).html(icon + text);
});
}
change
событие запускается каждый раз, когда в контейнере меток выбрана опция:
tail.select('#my-select',
{
//
}).on('change', function(item, state)
{
// No need to do anything
if (state == 'unselect')
return;
var labels = $(this.container).find('.select-handle');
var dropdown = $(this.dropdown);
// might be null (none selected)
if (!labels)
return;
var icon = '<i class="fab fa-amazon"></i>';
$.each(labels, function(i, label)
{
var key = $(label).attr('data-key');
var text = $(label).text();
var originalLi = $(dropdown).find('.dropdown-inner').find('[data-key="' + key + '"]'); // must always exists
$(label).html(icon + text);
});
));
Я хотел иконку, но вы можете использовать изображение или что-то еще.
Вы можете увидеть конечный результат в этом JSFiddle .