имеется прекрасное дополнение autocomplite combobox а именно Код (Text): (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 ); так вот если работать с сервером то я пишу вот так чтобы загрузить данные Код (Text): $.getJSON( "file.php?data=pr_dok", function(data){ $('#pr_dok').autocomplete({ source: data}); }); но беда в том что combobox не хочет воспринимать source: data как можно заставить его работать ?
Посмотри что содержит data, там может быть объект с различной инфой по запросу. Вполне возможно, что json находится в data.responseJSON (или это только если брать данные через $.ajax?) Код (Text): console.log(JSON.stringify(data));
Код (Text): $.getJSON( "file.php?data=pr_dok", function(data){ console.log(data); $('#pr_dok').autocomplete({ source: data}); }); Открываем консоль и смотрим что там, ошибка где-то именно там, в data.
вы не поняли .. Autocomplite чистый у меня прекрасно работает .. но когда я пытаюсь использовать дополнительный виджет combobox я не могу в combobox прокинуть data сейчас боевой пример дам
уф наконец то минутку дали .. вот что я имел ввиду http://jsfiddle.net/CKr6k/ Код (Text): $("#autocomplite").autocomplete({ source: ['hello', 'world'] }); $("#combo").combobox({ source: ['hello', 'world'] }); как переделать виджет ?
А где спрятанный select, под комбобоксом? ) http://jqueryui.com/autocomplete/#combobox Правда внимательно разглядывал?
ок.. как в этот скрытый селект загнать source:data ? а если честно он тут не при чем .. в предыдуших версиях народ дописывал .. но сейчас обновили версию http://jsfiddle.net/4extL/45/ и то что там работало .. сейчас глючит (( да и сейчас сам виджет немного более функционален стал
пока наковырял что если изменить вот так Код (Text): .autocomplete({ delay: 0, minLength: 0, source: $.proxy( this, "_source" ) },this.options ) то данные загружаются .. но при выборе нужного пункта - возникает ошибка, забороть которую мне пока не удалось ..
виджет допилен - пользуйтесь на здоровье Код (Text): (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" ) },this.options) .tooltip({ tooltipClass: "ui-state-highlight" }); this._on( this.input, { autocompleteselect: function( event, ui ) { if (ui.item.option !== undefined) { ui.item.option.selected = true; this._trigger( "select", event, { item: ui.item.option }); } else { this.element.val( ui.item.id ); } }, autocompletechange: "_removeIfInvalid" }); }, _createShowAllButton: function() { var input = this.input, wasOpen = false; $( "<a>" ) .attr( "tabIndex", -1 ) .attr( "title", "Показать все" ) .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; ids=""; if (this.options.source !== undefined){ $.each(this.options.source,function(){ if ( this.value.toLowerCase() === valueLowerCase ) { valid = true; ids = this.id; return false; } }); } else { 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 ) { if (ids!==""){this.element.val(ids);} return; } // Remove invalid value this.input .val( "" ) .attr( "title", value + " Совпадение не найдено" ) .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 ); возможно остались какие то недопилки - ищите и говорите. использование : Код (Text): <input type="text" id="test" name="test" /> $.getJSON( "file.php", function(data){ $( "#test" ).combobox({source:data}); }); также возможно и использование как и задумано разрабами - т.е. статически