3

我正在处理这个jQuery自动完成的事情,我无法从结果集中选择要在点击文本框后出现的项目。正如你所看到的,代码返回和item,我看到下拉菜单。 (我会张贴图片,但我是新的,不能= /) 但我点击它后,什么也没有发生:(乔布洛走了,没有显示,但结果只是在该领域的99)无法从JQuery自动完成选择选项中选择

这里是我的代码:

var techNumber = $('#<%= txtTechNumber.ClientID %>'); 
     techNumber.autocomplete({ 
      source: function(request, response) { 
       $.ajax({ 
        type: "POST", 
        contentType: "application/json; charset=utf-8", 
        url: '<%=ResolveUrl("~/Service/ServiceHelpdesk/") %>srvWebServiceRepository.asmx/FetchTechnicianList', 
        data: "{ 'techNumber':'" + request.term + "' }", 
        dataType: "json", 
        dataFilter: function(data) { return data; }, 
        success: function(data) { 
         if (data.d != null) { 
          response($.map(data.d, function(item) { 
           return { 
            label: highlight(item.TechNumber, request.term) + " - " + item.TechFirstName + " " + item.TechLastName, 
            value: item.TechID 
           } 
          })) 
         } 
        }, 
        error: function(XMLHttpRequest, textStatus, errorThrown) { 
         alert(XMLHttpRequest.responseText); 
        }, 
        select: function(event, ui) { 
         techNumber.val(ui.item); 
        } 
       }); 
      }, 
      minLength: 1 
     }); 

回答

2

而不是使用ui.item的,在你的select处理程序使用ui.item.label。这可能也不会伤害到事件preventDefault事件。最后,确保为select处理程序的定义里面的选项对象传递给小部件(以前是在AJAX选项对象):

var techNumber = $('#<%= txtTechNumber.ClientID %>'); 
     techNumber.autocomplete({ 
      source: function(request, response) { 
       $.ajax({ 
        type: "POST", 
        contentType: "application/json; charset=utf-8", 
        url: '<%=ResolveUrl("~/Service/ServiceHelpdesk/") %>srvWebServiceRepository.asmx/FetchTechnicianList', 
        data: "{ 'techNumber':'" + request.term + "' }", 
        dataType: "json", 
        dataFilter: function(data) { return data; }, 
        success: function(data) { 
         if (data.d != null) { 
          response($.map(data.d, function(item) { 
           return { 
            label: highlight(item.TechNumber, request.term) + " - " + item.TechFirstName + " " + item.TechLastName, 
            value: item.TechID 
           } 
          })) 
         } 
        }, 
        error: function(XMLHttpRequest, textStatus, errorThrown) { 
         alert(XMLHttpRequest.responseText); 
        } 
       }); 
      }, 
      select: function(event, ui) { 
       event.preventDefault(); 
       techNumber.val(ui.item.label); 
      }    
      minLength: 1 
     }); 
+0

太棒了!这就是问题所在,select:函数出错了。一旦我将其移动,它就会像本应该那样工作。非常感谢你的迅速回复。 – GenXisT 2012-01-12 17:58:15

+0

@Nakia:完全没问题! – 2012-01-12 18:00:18

+0

伟大的职位,这帮助我达到了最后期限!谢谢! – sacredfaith 2013-05-16 06:26:58

0

这一个是一个通用的修复。

你的函数的顶部添加此调用.autocomplete

(function ($) { 

    $(".ui-autocomplete-input").live("autocompleteopen", function() { 
     var autocomplete = $(this).data("autocomplete"), 
     menu = autocomplete.menu; 

     if (!autocomplete.options.selectFirst) { 
      return; 
     } 

     menu.activate($.Event({ type: "mouseenter" }), menu.element.children().first()); 
    }); 

} (jQuery)); 

然后在函数中只需添加一个参数selectFirst: true像以前一样:

$('#ctl00_PageBody_txtKeywords').autocomplete({ 
     source: function (request, response) { 
      $.ajax({ 
       type: 'POST', 
       url: 'getData.asmx/LoadData', 
       selectFirst: true, 

(PS找不到原始参考,这一定要指向它http://bit.ly/INzcrv