JQuery - funcion autocompletar

 
Vista:

funcion autocompletar

Publicado por alvaro (2 intervenciones) el 04/07/2013 22:52:46
estoy utilizando la funcion de autocompletar de jquery con combobox
el problema es que los valores del combo cargan dinamicamente cuando ejecuto el autocompletar solo me trae los options que se quemaron en el html

esta es la funcion no se como hacer que llene los valores depues de que el combo llene por completo


el codigo es

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
<script>
	$(document).ready(function() {
	setTimeout(function() {
	$(function() {
		$( "#OBDataset_NIT_1" ).combobox();
		$( "#OBDataset_NIT_1" ).toggle();
 
	});
		}, 900);
 
		});
	$(document).ready(function() {
	setTimeout(function() {
 
	(function( $ ) {
		$.widget( "custom.combobox", {
			_create: function() {
				this.wrapper = $( "<span>" )
					.addClass( "custom-combobox" )
					.insertAfter( this.element );
 
				this.element.hide();
				this._createAutocomplete();
				this._createShowAllButton();
			},
 
			_createAutocomplete: function() {
 
				var selected = this.element.children( ":selected" ),
					value = selected.val() ? selected.text() : "";
 
				this.input = $( "<input>" )
					.appendTo( this.wrapper )
					.val( value )
					.attr( "title", "" )
					.addClass( "custom-combobox-input ui-widget ui-widget-content ui-state-default ui-corner-left" )
					.autocomplete({
						delay: 0,
						minLength: 0,
						source: $.proxy( this, "_source" )
					})
					.tooltip({
						tooltipClass: "ui-state-highlight"
					});
 
				this._on( this.input, {
					autocompleteselect: function( event, ui ) {
						ui.item.option.selected = true;
						this._trigger( "select", event, {
							item: ui.item.option
						});
					},
 
					autocompletechange: "_removeIfInvalid"
 
 
			});
			},
 
			_createShowAllButton: function() {
				var input = this.input,
					wasOpen = false;
 
				$( "<a>" )
					.attr( "tabIndex", -1 )
					.attr( "title", "Show All Items" )
					.tooltip()
					.appendTo( this.wrapper )
					.button({
						icons: {
							primary: "ui-icon-triangle-1-s"
						},
						text: false
					})
					.removeClass( "ui-corner-all" )
					.addClass( "custom-combobox-toggle ui-corner-right" )
					.mousedown(function() {
						wasOpen = input.autocomplete( "widget" ).is( ":visible" );
					})
					.click(function() {
						input.focus();
 
						// Close if already visible
						if ( wasOpen ) {
							return;
						}
 
						// Pass empty string as value to search for, displaying all results
						input.autocomplete( "search", "" );
					});
			},
 
			_source: function( request, response ) {
				var matcher = new RegExp( $.ui.autocomplete.escapeRegex(request.term), "i" );
				response( this.element.children( "option" ).map(function() {
					var text = $( this ).text();
					if ( this.value && ( !request.term || matcher.test(text) ) )
						return {
							label: text,
							value: text,
							option: this
						};
				}) );
			},
 
			_removeIfInvalid: function( event, ui ) {
 
				// Selected an item, nothing to do
				if ( ui.item ) {
					return;
				}
 
				// Search for a match (case-insensitive)
				var value = this.input.val(),
					valueLowerCase = value.toLowerCase(),
					valid = false;
				this.element.children( "option" ).each(function() {
					if ( $( this ).text().toLowerCase() === valueLowerCase ) {
						this.selected = valid = true;
						return false;
					}
				});
 
				// Found a match, nothing to do
				if ( valid ) {
					return;
				}
 
				// Remove invalid value
				this.input
					.val( "" )
					.attr( "title", value + " didn't match any item" )
					.tooltip( "open" );
				this.element.val( "" );
				this._delay(function() {
					this.input.tooltip( "close" ).attr( "title", "" );
				}, 2500 );
				this.input.data( "ui-autocomplete" ).term = "";
			},
 
			_destroy: function() {
				this.wrapper.remove();
				this.element.show();
			}
		});
	})( jQuery );
	}, 800);
	});
 
</script>


como ven le agregue function ready y un delay pero ni asi me carga despues de que llena el combo del nit
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 302
Oro
Ha mantenido su posición en JQuery (en relación al último mes)
Gráfica de JQuery

funcion autocompletar

Publicado por xve (673 intervenciones) el 05/07/2013 08:49:34
Hola Alvaro, me es un poco complicado de probar sin el código html al que hace referencia... nos lo puedes mostrar para poder probar?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

funcion autocompletar

Publicado por alvaro (2 intervenciones) el 05/07/2013 17:28:19
el html es el siguiente : lo que sucede es que el formulario esta dentro de un gestor de contenidos y el gestor carga los option por post cuando reconoce e name.

<td><select name="OBDataset__107_1" class="Campo" id="OBDataset_NIT_1">
<option selected="selected" value="_">SELECCIONE</option></select>
</td>

cuando lo cargo asi solo me toma en el autocompletar el campo seleccione o los campos que queme directamente en el html pero no los campos que carga el sistema despues del post.

Pero para otra parte del codigo yo pregunto con jquery por un campo de otro dataset con

objeto=$('#OBDataSet_Pais_1').find('option[value='+$.trim(x[i].text)+']');

y el encuentra el dato por lo que se que si quedan cargados como option dentro del documento lo que creo es que el esta cargando el autocompletar antes que el sistema agrege los demas options pero no entiendo muy bien el codigo del autocompletar y no se como puedo hacer que cargue las funciones despues de
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar