Ver Mensaje Individual
  #8 (permalink)  
Antiguo 10/02/2011, 05:14
albeolo
 
Fecha de Ingreso: diciembre-2010
Ubicación: granada
Mensajes: 31
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Autocopletar en Select con jquery

Hola montes28,

Puede que te sirva este código que va entre el <head> y habiendo cargado el jquery-ui-1.8.9.autocomplete.css y el jquery-ui-1.8.9.autocomplete.js que puedes sacar de la página que indicas (el select se llama id="combobox" y está vacio de primeras):

Código:
	(function( $ ) {
		$.widget( "ui.combobox", {
			_create: function() {
				var self = this,
					select = this.element.hide(),
					selected = select.children( ":selected" ),
					value = selected.val() ? selected.text() : "";
				var input = this.input = $( "<input>" )
					.insertAfter( select )
					.val( value )
					.autocomplete({
						delay: 1,
						// minlength = caracteres minimos que hay que pulsar para empezar la busqueda
						minLength: 4,
						source: function( request, response ) {
							var matcher = new RegExp( $.ui.autocomplete.escapeRegex(request.term), "i" );
							response( select.children( "option" ).map(function() {
								var text = $( this ).text();
								if ( this.value && ( !request.term || matcher.test(text) ) )
									return {
										label: text.replace(
											new RegExp(
												"(?![^&;]+;)(?!<[^<>]*)(" +
												$.ui.autocomplete.escapeRegex(request.term) +
												")(?![^<>]*>)(?![^&;]+;)", "gi"
											), "<span style='color: #000000;'>$1</span>" ),
										value: text,
										option: this
									};
							}) );
						},
						select: function( event, ui ) {
							ui.item.option.selected = true;
							self._trigger( "selected", event, {
								item: ui.item.option
							});
						},
						change: function( event, ui ) {
							if ( !ui.item ) {
								var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( $(this).val() ) + "$", "i" ),
									valid = false;
								select.children( "option" ).each(function() {
									if ( $( this ).text().match( matcher ) ) {
										this.selected = valid = true;
										return false;
									}
								});
								if ( !valid ) {
									// remove invalid value, as it didn't match anything
									$( this ).val( "" );
									select.val( "" );
									input.data( "autocomplete" ).term = "";
									return false;
								}
							}
						}
					})
					.addClass( "ui-widget ui-widget-content ui-corner-left ui-lista-select" );

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

				this.button = $( "<button type='button'>&nbsp;</button>" )
					.attr( "tabIndex", -1 )
					.attr( "title", "Visualizar todo el contenido" )
					.insertAfter( input )
					.button({
						icons: {
							primary: "ui-icon-triangle-1-s"
						},
						text: false
					})
					.removeClass( "ui-corner-all" )
					.addClass( "ui-corner-right ui-button-icon" )
					.click(function() {
						// close if already visible
						if ( input.autocomplete( "widget" ).is( ":visible" ) ) {
							input.autocomplete( "close" );
							return;
						}

						// pass empty string as value to search for, displaying all results
						input.autocomplete( "search", "" );
						input.focus();
					});
			},

			destroy: function() {
				this.input.remove();
				this.button.remove();
				this.element.show();
				$.Widget.prototype.destroy.call( this );
			}
		});
	})( jQuery );

	$(function() {
                $( "#combobox" ).combobox();
		$( "#toggle" ).click(function() {
			$( "#combobox" ).toggle();
		});
});
Creo que te cambia automáticamente el input por un select, lo malo es que (por lo menos a mi), no te va a funcionar con la base de datos...

Yo he abierto tambien una pregunta para ver si alguien me puede echar una mano implementando al autocomplete combobox el tema de la base de datos: que al teclear 4 caracteres se recarguen los registro que contengan esos caracteres y luego se pueda hacer su selección en el combo.

Por favor, díme algo si consigues implementarlo con la base de datos, pues llevo mucho tiemp dándole vueltas y no lo consigo. Gracias.