2011-04-18 12 views
8

Actualmente, estoy usando autocompletar de jQuery UI en un cuadro de texto que hace referencia a un archivo ASHX.Adjuntar un elemento a una autocompleta de jQuery UI

Todo funciona bien, excepto que quiero agregar un elemento al final de la lista que dice: "Artículo no encontrado? Haga clic aquí para solicitar agregar un nuevo artículo."

Probé las siguientes líneas de código, pero lo único que hice fue formatear el elemento, no pude agregar.

data("catcomplete")._renderItem = function(ul, item) { 
     return $("<li></li>") 
      .data("item.catcomplete", item) 
      .append($("<a class='ui-menu-item'></a>").text(item.label)) 
      .appendTo($('ul').last('.autocomplete-category')); 
    }; 

¿Consejos? ¿Consejos? Mucho gracias! : D

Respuesta

9

Debe agregar su entrada adicional después de los incendios Open event. Eso le dará acceso a la lista, que es lo que está buscando, en lugar de a cada elemento, que es a lo que le da acceso el _renderItem.

He aquí un ejemplo que labra las entradas que han sido pobladas en la lista:

$("#myBox").autocomplete({ 
     source: "[URL]", 
     minLength: 2, 
     open: function(event, ui) { 
      $("ul.ui-autocomplete.ui-menu .ui-menu-item:odd").css("background-color","#dedede"); 
     } 
    }); 
+1

Gracias mucho! Voy a jugar con eso. Hasta ahora, hice lo siguiente: 'abrir: función (evento, ui) { //$("ul.ui-autocomplete.ui-menu .ui-menu-item: impar"). Css ("fondo -color "," #dedede "); var url = "No se puede encontrar el elemento? Solicitud para agregar un artículo new!"; $ ("ul.ui-autocomplete.ui-menu"). Append (url); } ' Parece que puedo agregar un elemento al final de la lista, ahora debo asegurarme de que sea una URL clicable. – curiousdork

+0

No importa, lo descubrí. :) – curiousdork

1

Usted no quiere jugar con _renderItem. Ese es el fn que rinde un artículo; se llama una vez para cada artículo en la lista de sugerencias.

Lo que quieres hacer es monkeypatch la función _renderMenu. La definición original en la interfaz de usuario jQuery 1.8.6 es así:

_renderMenu: function(ul, items) { 
    var self = this; 
    $.each(items, function(index, item) { 
     self._renderItem(ul, item); 
    }); 
}, 

Es probable que sea básicamente el mismo para otras versiones de jQuery UI.

Parche esto para agregar su artículo adicional, después de hacer el $.each.

+0

Esto parece bastante frágil. Si el equipo de UI decidiera actualizar cómo funcionaba la función '_renderMenu', necesitarías actualizar tu propio código, ya que' _renderMenu' no es parte de la API pública. – cdeszaq

+0

Sí, exactamente, es por eso que se llama * monkeypatching *. Consulte http://stackoverflow.com/questions/2435964/jqueryui-how-can-i-custom-format-the-autocomplete-plug-in-results/2436493#2436493 para obtener más detalles sobre la técnica. – Cheeso

Cuestiones relacionadas