我有一个<select>
我需要转换为功能更强的组合框。
<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为#34;状态&#34;仍然存在但隐藏)像这样$("#state").combobox();
我需要的是添加错误突出显示如果组合框是空的,则在表单提交上自定义小部件。 jQuery UI为此提供了一个自定义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类似乎对小部件外观没有任何影响。还尝试了硬编码,如here显示的$("#state").addClass('ui-state-error')
,但仍然没有运气。
同样尝试this solution,适用于selectmenu但不适用于组合框。
可能的解决方案:(感谢nowhere)
像这样编辑_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不会为组合框的元素生成唯一的ID。
答案 0 :(得分:1)
你可以试试我在这里制作的代码吗?我使用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"));
&#13;
.ui-state-error{
background-color:red;
}
&#13;
<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>
&#13;
编辑:
如果你需要识别一个特定的选择,你应该给它一个特定的id:如果你使用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个选择。