【发布时间】:2015-10-01 12:37:36
【问题描述】:
我有一个<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 "state" 仍然存在但隐藏)像这样$("#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,对选择菜单效果很好,但对组合框效果不佳。
可能的解决方案:(感谢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。
【问题讨论】:
-
你确定你没有将类应用到隐藏的选择吗? :P
-
@nowhere 这是问题的核心,在我提到的工作解决方案中,他们为小部件元素使用了一些生成的 id。但我没有找到组合框元素(自动完成和按钮)的 ID。
-
另外:据我所知 style="display:none" 在添加到选项时并不适用于所有浏览器。你用旧版本的 IE 试过吗?
-
此解决方案适用于特定浏览器和特定客户,因此没有问题。
-
您需要以某种方式识别小部件创建的选择...您不能依赖任何类或 id 吗?它是否有可以用来识别它的父元素?
标签: javascript jquery css jquery-ui