2012-11-29 17 views
5

Sayfamda verileri doğru şekilde getirip görüntüleyen bir otomatik tamamlayıcı var .... düzgün çalışmayı durdurduğunda select olayı var ....jQuery UI -> autocomplete -> ON seçin -> ui öğesi tanımsız

ben bir özelliği-sahip bir nesne olsun top.console.log (ui) yaparsanız
$("#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 
         } 
        })); 
       } 
      }); 


     } 
    }); 

yüzden ui nesnesini ...

almaz> öğesi ... bu tanımlanmamıştır. .. öyleyse I değerini kaydedersem undefined olsun ... bu nasıl mümkün olabilir?

bu ben bunu değiştirmek ve menü DAİMA Fareyle üzerine gelindiğinde kapatır 1.9.2 kullanırsam otomatik odaklama kullanırsak ..., değil hatta açılmaz 1.9.1

var!

cevap

27

Bugün, undefined ui.item özelliğiyle aynı sorunu yaşadım. Bazı hata ayıklamalardan sonra çözümü buldum. JQuery UI takımı Autocomplete with categories örnek kodunu biraz değiştirdi. Eğer örnekler kaynak kodunu görüntülediğinizde göreceğiniz:

<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> 

(ön 1.9 sürümlerinde) eskiden that._renderItemData(ul, item); ile hat that._renderItem(ul, item);. Ayrıca bakınız: bug #8560. Ancak bu, 1.9 Upgrade Guide numaralı belgede açıklanmamıştır.

_renderItemData(...,...) işlevini kullanmak için eklentimi değiştirdim ve bu sorunu çözdüm.

Bu yardımcı olur umarız! Sizin için

+1

+1, cevabınız zamanımı korusun. JQuery UI'yi 1.8.12'den 1.10.3'e yükselttim ve select fonksiyonu 'ui.item'de' undefined' (işlevsiz) oluyordu. That._renderItem değiştirdikten sonra (ul, item) '' that._renderItemData (ul, item) 'tekrar çalışır. –

+0

Vay be adamım, bugün beni kurtardın :) – 360Airwalk