2010-09-28 31 views
5

estoy usando _renderItem para modificar la lista de resultadosjQuery UI autocompletar - 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) 

Esto tiene el comportamiento de marcar automáticamente cualquier cosa que se parece a una URL como href. Me gustaría hacer todo el elemento un enlace

en un autocompletar antiguo que se ha hecho de esta manera:

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

pero esto no SEAM ser apoyado por más tiempo.

¿Alguien sabe cómo puedo ya sea:

1) usar algo similar a la función .result y simplemente hacer que todo el tema de un enlace
o
2) modificar el _renderItem por lo que no es automáticamente girando cadenas que parecen URL en href

Gracias.

+0

¿Se puede escribir el código dentro del evento abierto de autocompletar para CAMBIAR el marcado de los elementos ya procesados? –

Respuesta

3

Al definir su autocompletar, utilice la función de selección para crear su enlace:

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

Parece que esto ha cambiado en una versión anterior. Ahora usted tiene que utilizar

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

¡Oh, muchas gracias! Es una pena que no esté cubierto en [API docs] (http://api.jqueryui.com/autocomplete) –

+0

Esto funciona, pero el enfoque documentado actual es crear su propia autocompletar personalizada extendiendo widgets. Ver mi respuesta a continuación. –

3

Un mejor enfoque a la personalización de autocompletar de jQuery es crear su propia 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

"mejor enfoque": qué tal "solo un enfoque que funcione". Todo lo que probé con sintaxis antiguas que encontré en Internet no sirvió para nada. Esta sintaxis de extensión de widget es la única que funcionó para mí. Gracias por compartir. Es lamentable que los documentos de jQuery para '_renderItem' no contengan un ejemplo completo como el que usted brinda aquí. – Pistos

Cuestiones relacionadas