2

我对 jQuery UI 自动完成有一个奇怪的问题。我想要它,以便当文本字段获得焦点时,会出现自动完成中所有选项的列表。这可行,但是当通过单击选择一个项目时,建议保持打开状态。我希望建议列表消失,就像自动完成正常工作一样。

当您使用键盘选择项目时它工作正常,但是当您单击一个项目时,列表只会一遍又一遍地再次出现。

为了使这个问题更奇怪,该功能在手动传递值时完美运行。它仅在我传入 JSON 源时才开始发生。

有任何想法吗!?

工作代码- http://jsbin.com/aFeceTe/1/edit?html,js,output

$(document).ready(function(){

   var test = [ { value: "1",label: "Google" }, { value: "2", label:"StackOverflow" }, { value: "3", label:"Microsoft" }, { value: "4", label:"Yahoo" } ];

   $("input").autocomplete({
     source: test,
     delay: 0,
     minLength: 0,
     select: function(event, ui) {      
        event.preventDefault();
        $(this).val(ui.item.label).attr('title', ui.item.label);
     }
  }).focus(function () {
      $(this).val('').autocomplete("search");
  });

});

损坏的代码- http://jsbin.com/uyOGUVU/6/edit?html,js,output

$(document).ready(function(){

   $("input").autocomplete({
      source: 'http://jsbin.com/IdIXIRU/3/js',
      delay: 0,
      minLength: 0,
      select: function(event, ui) {      
         event.preventDefault();
         $(this).val(ui.item.label).attr('title', ui.item.label);   
      }
   }).focus(function () {
      $(this).val('').autocomplete("search");
   });

});
4

1 回答 1

3

试试这个

 $(document).ready(function(){
    var temp = true;
    $("input").autocomplete({
        source: 'http://jsbin.com/IdIXIRU/3/js',
        delay: 0,
    minLength: 0,
        select: function(event, ui) {
            event.preventDefault();
            $(this).val(ui.item.label).attr('title', ui.item.label);
            temp = true;
            return false;            
        }
  }).focus(function () {
       if(temp) {
         $(this).autocomplete("search");
         temp = false;
     }
   });
});

演示

于 2013-10-04T12:37:22.540 回答