2010-09-28 32 views
5

Sto usando _renderItem modificare la lista dei risultatijQuery UI di completamento automatico - renderItem

.data("autocomplete")._renderItem = function(ul, item) { 
      var temp = item.url.substring(16, item.url.length) 
      return $("<li></li>") 
      .data("item.autocomplete", item) 
      .append("<a>" + item.value + "<br>" + item.url + "<br>" + item.description + "<br>" + "Support URL: " + item.support_url + "<br>" + "Contact: " + "<a href=" + item.contact + ">Test</a>" + "<br />" + "</a>" ) 
      .appendTo(ul) 

Questo ha il comportamento di marcatura automaticamente tutto ciò che si presenta come un url come href. Mi piacerebbe fare l'intero oggetto un collegamento

in un completamento automatico vecchio che è stato fatto in questo modo:

.result(function(event, item) { 
    location.href = item.url; 
    }); 

ma questo non Seam di essere sostenuto più a lungo.

Qualcuno sa come posso neanche:

1) usare qualcosa di simile alla funzione .result e solo fare l'intero oggetto un link
o
2) modificare il _renderItem in modo che non è automaticamente trasformare stringhe che sembrano URL in href

Grazie.

+0

È possibile scrivere codice all'interno dell'evento di apertura automatica per MODIFICARE il markup di articoli già visualizzati? –

risposta

3

Quando si specifica il completamento automatico, utilizzare la funzione di selezione per creare il tuo link:

$('selector').autocomplete({ 
    source: ..., 
    select: function(event, ui) { window.location = ui.url; } 
}); 
10

Sembra che questo è cambiato in una versione precedente. Ora è necessario utilizzare

$element.data('uiAutocomplete')._renderItem() 
+1

Oh, grazie mille! La vergogna non è trattata in [documenti API] (http://api.jqueryui.com/autocomplete) –

+0

Questo funziona, ma l'attuale approccio documentato è quello di creare il proprio autocomplete personalizzato estendendo i widget. Vedi la mia risposta qui sotto. –

3

Un approccio migliore alla personalizzazione di completamento automatico di jQuery è quello di creare il proprio extended version using widgets.

$.widget("custom.mySpecialAutocomplete", $.ui.autocomplete, { 
    // Add the item's value as a data attribute on the <li>. 
    _renderItem: function(ul, item) { 
    return $("<li>") 
     .attr("data-value", item.value) 
     .append($("<a>").text(item.label)) 
     .appendTo(ul); 
    }, 
    // Add a CSS class name to the odd menu items. 
    _renderMenu: function(ul, items) { 
    var that = this; 
    $.each(items, function(index, item) { 
     that._renderItemData(ul, item); 
    }); 
    $(ul).find("li:odd").addClass("odd"); 
    } 
}); 

var availableTags = [ 
    "ActionScript", 
    "AppleScript", 
    "Asp", 
    "BASIC", 
    "C", 
    "C++", 
    "Clojure", 
    "COBOL", 
    "ColdFusion", 
    "Erlang", 
    "Fortran", 
    "Groovy", 
    "Haskell", 
    "Java", 
    "JavaScript", 
    "Lisp", 
    "Perl", 
    "PHP", 
    "Python", 
    "Ruby", 
    "Scala", 
    "Scheme" 
]; 

$('#myElement').mySpecialAutocomplete({ 
    source: availableTags 
}); 
+0

"approccio migliore" - che dire di "solo approccio che funziona". Tutto ciò che ho provato da vecchie sintassi che ho trovato su Internet non ha fatto nulla. Questa sintassi di estensione del widget è l'unica che ha funzionato per me. Grazie per la condivisione. È un peccato che i documenti di jQuery per '_renderItem' non contengano un esempio completo come quello che dai qui. – Pistos

Problemi correlati