Я полностью согласен с комментариями @James Crook.
Однако вы можете попробовать этот рабочий пример Codepen , который я создал.
О решении:
Имея следующий select
Код HTML-элемента:
<select name="webmenu" id="webmenu">
<option value="calendar" data-image="icons/icon_calendar.gif">Calendar</option>
<option value="shopping_cart" data-image="icons/icon_cart.gif">Shopping Cart</option>
<option value="cd" data-image="icons/icon_cd.gif">CD</option>
<option value="email" selected="selected" title="icons/icon_email.gif">Email</option>
<option value="faq" data-image="icons/icon_faq.gif">FAQ</option>
<option value="games" data-image="icons/icon_games.gif">Games</option>
</select>
Сначала нужно применить jquery.duallistbox
к этому select
элементу HTML следующим образом:
$("select").DualListBox({
json: false // use local data
timeout: 300 // delay for filter functionality
});
В результате этот плагин создает два разных select
HTML-элемента. И мы должны применить плагин jquery.msDropDown
к каждому из них следующим образом:
$("select.unselected").msDropDown();
$("select.selected").msDropDown();
С этим пользовательский интерфейс готов.
![enter image description here](https://i.stack.imgur.com/m0ZWO.png)
Однако нам нужно сохранить функциональность для обоих плагинов. Нам нужно обновлять / перерисовывать dropdowns with icons
каждый раз, когда пользователь вносит изменения либо:
нажатие на кнопки jquery.duallistbox
:
$('div.center-block button').on('click', updateDropdowns);
или связав внутри jquery.duallistbox
фильтр input
поле:
$('input.filter').on('keyup', function(){
// Following timeout value (300) should not be lower than
// timeout option from DualListBox
setTimeout(updateDropdowns, 300);
});
Обратите внимание, что эти слушатели ссылаются на метод updateDropdowns
. И здесь мы играем с DOM, чтобы заново отобразить выпадающие списки, применяя плагин jquery.msDropDown
к каждому select
HTML-элементам. Этот метод выглядит так:
var updateDropdowns = function(){
// Update/re-render first dropdown
$('select.selected').detach().appendTo('.col-md-5:last');
$('.col-md-5:last').find('div').remove();
delete $('select.selected').data().dd;
$('select.selected').msDropdown();
// Update/re-render second dropdown
$('select.unselected').detach().appendTo('.col-md-5:first');
$('.col-md-5:first').find('div').remove();
delete $('select.unselected').data().dd;
$('select.unselected').msDropdown();
};
Хочу подчеркнуть, что этот процесс может быть дорогим в плане производительности при работе с большим количеством options
в select
HTML-элементах. Определенно, это обходной путь, и лучшим выбором может быть метод .redraw()
, который должен быть реализован для плагина jquery.msDropDown
.
Надеюсь, что это решение поможет решить вашу проблему.