2012-11-29 1 views
5

페이지를 자동으로 가져 와서 표시하는 자동 완성 기능이 있습니다. 제대로 작동하지 않을 때 선택 이벤트입니다 ...jQuery UI -> 자동 완성 -> ON 선택 -> ui 항목이 정의되지 않았습니다.

나는 하나 개의 속성 인으로 개체를 얻을 top.console.log (UI)를 할 경우
$("#fld_search1").catcomplete({ 
     delay: 50, 
     minLength: 2, 
     open: function(e, ui){ 
      if(searching) return; 
      //console.log($(this).data('catcomplete')); 
      var acData = $(this).data('catcomplete'); 
      var styledTerm = '<strong>%s</strong>'.replace('%s', acData.term); 


      acData.menu 
       .element 
       .find('li a') 
       .each(function() { 
        var me = $(this); 
        me.html(me.text().replace(acData.term, styledTerm)); 
       }); 
      //return match.replace(new RegExp("("+keywords+")", "gi"),'<i>$1</i>'); 
     }, 
     select: function(event, ui) { 
      var I = ui.item; 
      top.console.log(ui); 
      $("#fld_search1").catcomplete("close"); 

      $('#fld_search1').val(I.name); 
      window.location = '/podjetje/'+I.value+'.html'; 
      //$('#frm_company_id').val(I.value); 
      return false; 
     }, 
     source: function(request, response) { 


      search_term = request.term; 

      if (search_term in cache) { 
       response(cache[ tesearch_termrm ]); 
       return; 
      } 


      var suggest_url = "/companies/find_company.json"; 


      $.ajax({ 
       url: suggest_url, 
       dataType: "json", 
       type : "POST", 
       data: { 
        owner: request.term 
       }, 
       success: function(data) { 
        response($.map(data, function(item) { 
         var alabel = item.label.replace(
           new RegExp('(' + 
            $.ui.autocomplete.escapeRegex(request.term) + 
            ')'), 
          "<b>$1</b>"); 
         return { 
          value: item.value, 
          label: item.label, 
          name: item.name, 
          category: item.category 
         } 
        })); 
       } 
      }); 


     } 
    }); 

이 그래서 UI 객체 ...

을하지 않습니다> 항목은 ... 그 정의되지 않습니다. .. 그래서 내가 값을 기록한다면 내가 정의되지 않는다. 어떻게 가능 할까?

이 내가 그것을 변경하고 메뉴가 항상 마우스 오버에 종료 1.9.2을 사용하는 경우 나 자동 초점을 사용하는 경우 ..., 그것은 심지어는 열리지 않습니다 1.9.1

입니다!

답변

27

오늘 정의되지 않은 ui.item 속성에 동일한 문제가있었습니다. 일부 디버깅 후 솔루션을 찾았습니다. jQuery UI 팀이 Autocomplete with categories 예제 코드를 약간 변경했습니다. 이 예제의 소스 코드를 볼 때 당신은 볼 수 있습니다 :

<script> 
    $.widget("custom.catcomplete", $.ui.autocomplete, { 
     _renderMenu: function(ul, items) { 
      var that = this, 
       currentCategory = ""; 
      $.each(items, function(index, item) { 
       if (item.category != currentCategory) { 
        ul.append("<li class='ui-autocomplete-category'>" + item.category + "</li>"); 
        currentCategory = item.category; 
       } 
       that._renderItemData(ul, item); 
      }); 
     } 
    }); 
    </script> 

(이전 1.9 버전)로 사용 that._renderItemData(ul, item);와 라인 that._renderItem(ul, item);을. 참조 : bug #8560. 그러나 이것은 1.9 Upgrade Guide에 언급되어 있지 않습니다.

그래서 플러그인을 변경하여 _renderItemData(...,...) 함수를 사용하고 문제가 해결되었습니다.

희망이 도움이됩니다.

+1

+1, 대답은 내 시간을 절약합니다. 방금 JQuery UI를 1.8.12에서 1.10.3으로 업그레이드했고 select 함수가'ui.item'에서'undefined '가되었습니다. 'that._renderItem (ul, item)'을'that._renderItemData (ul, item)'로 바꾸면 다시 작동합니다. –

+0

와우 감사합니다. 오늘 저를 구해 주셨습니다. :) – 360Airwalk