3

Я работаю над этой функцией автозаполнения jQuery, и я не могу получить элемент, выбранный из набора результатов, чтобы появиться в текстовом поле после нажатия на него.Невозможно выбрать из параметров выбора автозаполнения JQuery

Как вы можете видеть, код возвращается и элемент, я вижу выпадающее меню. (Я бы опубликовал pic, но я новичок и не могу = /) , но после того, как я нажму на него, ничего не произойдет: (Джо Блов уходит, не показан, а результат - всего 99 в поле)

вот мой код:

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 используйте ui.item.label в вашем select обработчика. Вероятно, это не помешало бы и 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

+0

@Nakia: Никаких проблем! –

+0

Отличный пост, это помогло мне встретить крайний срок! Благодаря! – sacredfaith

0

Это один общий Fix.

Добавить это на вершине своей функции перед вызовом .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)