5

我正在嘗試這樣做http://jqueryui.com/autocomplete/#combobox 問題是,當我用鼠標移動一個選項時,選項將消失,並且它出現了這樣的建議:「x不匹配任何項目「其中x是我在組合框中寫入的字母。 現在我張貼的腳本是在網站上:Jquery ui combobox(autocomplete)消失

(function($) { 
$.widget("ui.combobox", { 
    _create: function() { 
    var input, 
     that = this, 
     wasOpen = false, 
     select = this.element.hide(), 
     selected = select.children(":selected"), 
     value = selected.val() ? selected.text() : "", 
     wrapper = this.wrapper = $("<span>") 
     .addClass("ui-combobox") 
     .insertAfter(select); 

    function removeIfInvalid(element) { 
     var value = $(element).val(), 
     matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(value) + "$", "i"), 
     valid = false; 
     select.children("option").each(function() { 
     if ($(this).text().match(matcher)) { 
      this.selected = valid = true; 
      return false; 
     } 
     }); 

     if (!valid) { 
     // remove invalid value, as it didn't match anything 
     $(element) 
      .val("") 
      .attr("title", value + " didn't match any item") 
      .tooltip("open"); 
     select.val(""); 
     setTimeout(function() { 
      input.tooltip("close").attr("title", ""); 
     }, 2500); 
     input.data("ui-autocomplete").term = ""; 
     } 
    } 

    input = $("<input>") 
     .appendTo(wrapper) 
     .val(value) 
     .attr("title", "") 
     .addClass("ui-state-default ui-combobox-input") 
     .autocomplete({ 
     delay: 0, 
     minLength: 0, 
     source: function(request, response) { 
      var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i"); 
      response(select.children("option").map(function() { 
      var text = $(this).text(); 
      if (this.value && (!request.term || matcher.test(text))) 
       return { 
       label: text.replace(
        new RegExp(
        "(?![^&;]+;)(?!<[^<>]*)(" + 
        $.ui.autocomplete.escapeRegex(request.term) + 
        ")(?![^<>]*>)(?![^&;]+;)", "gi" 
       ), "<strong>$1</strong>"), 
       value: text, 
       option: this 
       }; 
      })); 
     }, 
     select: function(event, ui) { 
      ui.item.option.selected = true; 
      that._trigger("selected", event, { 
      item: ui.item.option 
      }); 
     }, 
     change: function(event, ui) { 
      if (!ui.item) { 
      removeIfInvalid(this); 
      } 
     } 
     }) 
     .addClass("ui-widget ui-widget-content ui-corner-left"); 

    input.data("ui-autocomplete")._renderItem = function(ul, item) { 
     return $("<li>") 
     .append("<a>" + item.label + "</a>") 
     .appendTo(ul); 
    }; 

    $("<a>") 
     .attr("tabIndex", -1) 
     .attr("title", "Show All Items") 
     .tooltip() 
     .appendTo(wrapper) 
     .button({ 
     icons: { 
      primary: "ui-icon-triangle-1-s" 
     }, 
     text: false 
     }) 
     .removeClass("ui-corner-all") 
     .addClass("ui-corner-right ui-combobox-toggle") 
     .mousedown(function() { 
     wasOpen = input.autocomplete("widget").is(":visible"); 
     }) 
     .click(function() { 
     input.focus(); 

     // close if already visible 
     if (wasOpen) { 
      return; 
     } 

     // pass empty string as value to search for, displaying all results 
     input.autocomplete("search", ""); 
     }); 

    input.tooltip({ 
     tooltipClass: "ui-state-highlight" 
    }); 
    }, 

    _destroy: function() { 
    this.wrapper.remove(); 
    this.element.show(); 
    } 
}); 
    })(jQuery); 

    $(function() { 
    $("#combobox").combobox(); 
    }); 

和CSS:

.ui-combobox { 
position: relative; 
display: inline-block; 
} 
.ui-combobox-toggle { 
    position: absolute; 
    top: 0; 
    bottom: 0; 
    margin-left: -1px; 
    padding: 0; 
    /* support: IE7 */ 
    *height: 1.7em; 
    *top: 0.1em; 
} 
.ui-combobox-input { 
    margin: 0; 
    padding: 0.3em; 
} 

和我的選擇(建造與JSP)

<select id="combobox"><option value="">Select one...</option> 
            <%for(int i=0;i<ut.size();i++){ 
            out.print("<option value=\""+ut.get(i).getIdUtente()+ 
              "\">"+ut.get(i).getNome()+" "+ut.get(i).getCognome()+" ("+ut.get(i).getIdUtente()+")"+"</option>"); 

            } 
             %> 

            </select> 

現在,這裏是我的問題? 在此先感謝!

回答

13

它也發生在我身上。它似乎是jQuery UI js文件被調用兩次。刪除一個,它會工作

+0

+1這是一個很難弄清楚。我有鏈接到舊版本和新版本的jQuery UI。 – nima 2013-03-11 20:39:15

+0

哈哈哈感謝我的更難。其中一個通常在頭文件中調用,第二個通過Javascript動態調用:s。 – bicycle 2013-03-14 16:06:41

+1

我有複製意外粘貼該代碼,以便發生此問題。很難確定問題。 @自行車的建議爲我工作 – 2014-04-18 11:50:14

3

這將發生在相關的情況下,您同時參考主jQuery UI(jquery-ui.js)庫和jquery ui自動完成的各個庫。 jQuery-ui文件包含所有的孩子,所以不需要同時引用這兩個文件。

+0

這解決了我的問題。我正在尋找像所有人所建議的重複的js文件。事實證明,jquery-ui.js包含所有單獨的文件。 – Yorro 2014-01-22 10:09:26

+0

謝謝,朋友。這爲我修好了。 – devKoen1 2017-11-07 11:47:07