2012-03-01 26 views
62

ile ayarlanamaz 'jQuery UI otomatik tamamlama öğeleri HTML olarak oluşturmak için aşağıdaki kodu kullanıyorum. Öğeler, otomatik tamamlama denetiminde doğru şekilde oluşturulur, ancak bu javascript hatasını alıyorum ve onu taşıyamam.undefined jQuery kullanıcı arabiriminin '_renderItem' özelliğinin HTML

Firefox JavaScript argüman

Chrome'u dönüştürülemedi neden bu hatayı atma, ya da ne ben yapmak zorunda olduğunu tanımsız

donor.GetFriends(function (response) { 
    // setup message to friends search autocomplete 
    all_friends = []; 
    if (response) { 
     for (var i = 0; i < response.all.length - 1; i++) {     
       all_friends.push({ 
        "label":"<img style='padding-top: 5px; width: 46px; height: 46px;' src='/uploads/profile-pictures/" + 
         response.all[i].image + "'/><br/><strong style='margin-left: 55px; margin-top: -40px; float:left;'>" + 
         response.all[i].firstname + " " + response.all[i].lastname + "</strong>", 

        "value":response.all[i].firstname + " " + response.all[i].lastname, 
        "id":response.all[i].user_id}); 
      } 
     }   

    $('#msg-to').autocomplete({ 
     source:all_friends, 
     select:function (event, ui) {    
      // set the id of the user to send a message to 
      mail_message_to_id = ui.item.id; 
     } 

    }).data("autocomplete")._renderItem = function (ul, item) { 
     return $("<li></li>") 
      .data("item.autocomplete", item) 
      .append($("<a></a>").html(item.label)) 
      .appendTo(ul); 
    }; 
}); 

emin değil malı '_renderItem' ayarlanamaz Geçmiş olsun ... Herhangi bir yardım takdir edilir.

+0

Sayfada "# msg-to" yazan bir öğe var mı? –

+0

Evet orada $ ("# msg-to") ... olan .autocomplete için bağlayıcı olduğu, bir metin giriş alanıdır. –

+1

bu yardımcı oldu: http://stackoverflow.com/questions/5590776/why-am-i-getting-this-js-error – Ilmars

cevap

175

arasında olmak zorundadır ve yukarıdaki adlı kullanıcının yayınına drcforbin yorum yapamam Kendi cevabımı eklemek zorundayım. OP'in sahip olduğu durumdan gerçekten farklı bir sorun olmasına rağmen, drcforbin doğrudur. Artık bu konuya gelen herkes, yeni çıkan jQuery UI sürümü nedeniyle muhtemelen bu sorunla karşı karşıya. Otomatik tamamlama ile ilgili belirli adlandırma kuralları v1.9'da jQuery UI'de kullanımdan kaldırılmıştır ve v1.10'da tamamen kaldırılmıştır (bkz. http://jqueryui.com/upgrade-guide/1.10/#autocomplete).

nedir kafa karıştırıcı, ancak, bunlar sadece item.autocomplete veri etiketi için ui-otomatik tamamlama öğesi geçişi söz ama otomatik tamamlama veri etiketi de ui- olarak yeniden adlandırıldı olmasıdır Otomatik tamamlama. Ve daha da kafa karıştırıcı çünkü demolar hala eski sözdizimini kullanıyorlar (ve böylece kırılıyorlar).

aşağıdaki demo adresten Özel Veri jQuery UI 1.10.0 için _renderItem işlevinde değişmesi gerekiyor şudur: http://jqueryui.com/autocomplete/#custom-data

Orjinal kodu:

.data("autocomplete")._renderItem = function(ul, item) { 
    return $("<li>") 
    .data("item.autocomplete", item) 
    .append("<a>" + item.label + "<br>" + item.desc + "</a>") 
    .appendTo(ul); 
}; 

Sabit kod:

.data("ui-autocomplete")._renderItem = function(ul, item) { 
    return $("<li>") 
    .data("ui-autocomplete-item", item) 
    .append("<a>" + item.label + "<br>" + item.desc + "</a>") 
    .appendTo(ul); 
}; 

Her iki otomatik tamamlama için ve ürün.autoco'daki değişikliklere dikkat edin. mplete. Bunun kendi projelerimde çalıştığını doğruladım.

+1

+1 için teşekkürler sorunu çözdü. İkinci paragrafında bahsettiğin kesin problemi yaşıyordum. Sorun çözüldü! –

+0

Harika bir açıklama ... bu kadar detaylı bir şey için her yere bakıyor. Teşekkürler – Greg

+0

Harika çözüm. Tamamen benim için çalıştı! – user1429980

25

Ben aynı sorun koştu ... sonraki sürümlerinde görünüyor, sanırım, ben sadece katılmasından bu yana .data("ui-autocomplete") yerine .data("autocomplete")

+2

Fark – mac10688

+2

Teşekkür görmüyorum, bu beni – Tomba

1

jquery ui sürümüne bağlı olarak bunu "otomatik tamamlama" veya "ui-otomatik tamamlama" olacaktır ya kullanıyoruz, ben sorunu (~ ln 78-85)

düzeltmek için combobox eklenti bu güncellemeyi,

var autoComplete = input.data("ui-autocomplete"); 
if(typeof(autoComplete) == "undefined") 
    autoComplete = input.data("autocomplete"); 

autoComplete._renderItem = function(ul, item) { 
...

6

jquery 1.10.2 kullanıyorum ve kullanarak çalışmak: şimdi

.data("custom-catcomplete")._renderItem = function(ul, item) { 
    return $("<li>") 
    .data("ui-autocomplete-item", item) 
    .append("<a>" + item.label + "<br>" + item.desc + "</a>") 
    .appendTo(ul); 
}; 
+0

Teşekkür ederim, kod biraz yardımcı oldu bana sonsuz seçenekleri denedikten sonra ^^ – azzy81

5

ve jQuery-2.0 ile.0, yeni modülünüzün adı, ancak "." "-" tarafından (nokta) (tire): Bu yazı karşılaşmış herhangi bir kişi uğruna

jQuery.widget ('custom.catcomplete', jQuery.ui.autocomplete, { 
    '_renderMenu': function (ul, items) { 
     // some work here 
    } 
}); 

$this.catcomplete({ 
    // options 
}).data('custom-catcomplete')._renderItem = function (ul, item) {} 
3

Gönderme. Eğer belge hazır olayı içinde .autocomplete koymazsan

Bu hata da kendini gösterecektir.

Aşağıdaki kod başarısız olur:

<script type="text/javascript"> 
    $('#msg-to').autocomplete({ 
     source:all_friends, 
     select:function (event, ui) {    
      // set the id of the user to send a message to 
      mail_message_to_id = ui.item.id; 
     } 

    }).data("autocomplete")._renderItem = function (ul, item) { 
     return $("<li></li>") 
      .data("item.autocomplete", item) 
      .append($("<a></a>").html(item.label)) 
      .appendTo(ul); 
    }; 
</script> 

Aşağıdaki kod çalışır iken:

<script type="text/javascript"> 
    $(function(){ 
     $('#msg-to').autocomplete({ 
      source:all_friends, 
      select:function (event, ui) {    
       // set the id of the user to send a message to 
       mail_message_to_id = ui.item.id; 
      } 

     }).data("autocomplete")._renderItem = function (ul, item) { 
      return $("<li></li>") 
       .data("item.autocomplete", item) 
       .append($("<a></a>").html(item.label)) 
       .appendTo(ul); 
     }; 
    }); 
</script> 
+0

Bu benim için bir omurga app – jakeed1

+0

içinde çalıştı bu benim item.label eksik sonra bir Yasemin spec –

7

benim cevap geciktim biliyorum ama gelecekte insanlar hala yaparsanız değil

 
.data("ui-autocomplete-item", item) 

sonra işe denemek için olsun bu

insted
$(document).ready(function(){ 
$('#search-id').autocomplete({ 
    source:"search.php", 
    minLength:1,  
    create: function() { 
    $(this).data('ui-autocomplete')._renderItem = function (ul, item) { 
     return $('<li>') 
     .append("<a>" + item.value + ' | ' + item.label + "</a>") 
     .appendTo(ul); 
    }; 
    } 
}) 
}); 

Benim için çalıştı ve ben

 
Uncaught TypeError: Cannot set property '_renderItem' of undefined 

Umut bu birileri

/kahin

:) yardımcı olur dedim çünkü .. ben giriş olamazdı giriş çekim özelliği ile sorunu yaşıyordu
+0

bir artı (+) işareti içinde benim "undefined özellik '_renderItem' undefined" benim nedeni oldu . – Ali

+0

@ShafaqatAli Teşekkürler! – Kahin

İlgili konular