У меня есть <select>
который мне нужно преобразовать в более функциональный combobox.
<span class="combo_box">
<select id="state" name="state" tabindex="24">
<option value="" disabled selected style="display:none"></option>
<!-- Some JSP here -->
</select>
</span>
И я преобразовал его в виджет (поэтому оригинальный <select>
с id "state" все еще существует, но скрыт), как этот $("#state").combobox();
Мне нужно добавить ярлык ошибки к этому настраиваемому виджету при отправке формы, если combobox пуст. Для этого пользовательский интерфейс jQuery имеет пользовательский CSS-класс ui-state-error
.
Скрипт проверки (отлично работает, когда я его отлаживаю)
function setComboboxClassBeforeSubmit(elementID) {
var flag = true;
var element = document.getElementById(elementID);
var combobox = $(element).combobox();
combobox.removeClass('ui-state-error');
if (isEmpty(element)) {
combobox.addClass('ui-state-error');
flag = false;
}
return flag;
}
Но добавление этого класса CSS, похоже, не влияет на внешний вид виджета. Также попробовал $("#state").addClass('ui-state-error')
как показано здесь, что-то вроде $("#state").addClass('ui-state-error')
и до сих пор не повезло. Также попробовал это решение, отлично работает для selectmenu, но не для combobox.
Возможное решение: (спасибо нигде)
Редактирование _createAutocomplete: function()
следующим образом:
_createAutocomplete: function() {
var selected = this.element.children( ":selected" ),
value = selected.val() ? selected.text() : "";
this.input = $( "<input>" )
.appendTo( this.wrapper )
.val( value )
.attr( "title", "" )
.attr( "id", "ui-" + this.element.attr("id") + "-input" )
...
Проблема: API по умолчанию не генерирует уникальный идентификатор для элементов со списком.
Можете ли вы попробовать с кодом, который я здесь сделал? Я работал с использованием примера jqueryui: http://jsfiddle.net/b5e83x2q/
function checkValue(item){
item.removeClass('ui-state-error');
if(item.val()==""){
item.addClass('ui-state-error');
}
}
checkValue($(".custom-combobox input"));
.ui-state-error{
background-color:red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span class="custom-combobox">
<input title="" class="custom-combobox-input ui-widget ui-widget-content ui-state-default ui-corner-left ui-autocomplete-input" autocomplete="off" value="">
</span>
РЕДАКТИРОВАТЬ:
если вам нужно определить конкретный выбор, вы должны указать ему конкретный идентификатор: если вы использовали тот же код примера jqueryui, который у вас должен быть:
_create: function() {
this.wrapper = $( "<span>" )
.addClass( "custom-combobox" )
.insertAfter( this.element );
this.element.hide();
this._createAutocomplete();
this._createShowAllButton();
}
там вы можете попытаться добавить что-то вроде:
this.attr('id', 'specificId');
или отредактируйте оболочку span:
_create: function() {
this.wrapper = $( "<span>" )
.addClass( "custom-combobox" )
.insertAfter( this.element )
.attr('id', 'specificId');
this.element.hide();
this._createAutocomplete();
this._createShowAllButton();
}
После этого вы можете использовать:
checkValue($("#specificId input"));
для изменения только 1 выберите.