JQuery UI Autocomplete Combobox突出显示

时间:2015-10-01 12:37:37

标签: javascript jquery css jquery-ui

我有一个<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。

1 个答案:

答案 0 :(得分:1)

你可以试试我在这里制作的代码吗?我使用jqueryui示例进行操作:http://jsfiddle.net/b5e83x2q/

&#13;
&#13;
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;
&#13;
&#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个选择。