Я работал над большим выбором поиска, используя автозаполнение jquery ui.
Он извлекает удаленные данные из запроса и работает хорошо. Настройка такова, что у пользователя есть панель поиска.
В левом блоке Div отображаются результаты поиска, затем они щелкают (выбирают) элемент, и он отображается в правом блоке Div.
В настоящее времявставленный код делает это. Но я хочу, чтобы результаты в журнале (правый div) также форматировались так же, как и div поиска, поэтому значения должны находиться в пределах их категории выше.
Я могу добавить категорию к каждому журналу, например: log(ui.item.category + ui.item.value);
, но я этого не хочу. Поскольку он показывает категорию перед каждым отдельным элементом, где, как если бы вы выбирали 4 из одной и той же категории, категория просто находилась бы выше, как результаты поиска.
Вот код на данный момент.
$( function() {
function split( val ) {
return val.split( /,\s*/ );
}
function extractLast( term ) {
return split( term ).pop();
}
function log( message ) {
$( "<div>" ).text( message ).prependTo( ".selected-results" );
$( ".selected-results" ).scrollTop( 0 );
}
// Show class category
$.widget( "custom.catcomplete", $.ui.autocomplete, {
_create: function() {
this._super();
this.widget().menu( "option", "items", "> :not(.ui-autocomplete-category)" );
},
_renderMenu: function( ul, items ) {
var that = this,
currentCategory = "";
$.each( items, function( index, item ) {
var li;
if ( item.category != currentCategory ) {
ul.append( "<li class='ui-autocomplete-category'>" + item.category + "</li>" );
currentCategory = item.category;
}
li = that._renderItemData( ul, item );
if ( item.category ) {
li.attr( "aria-label", item.category + " : " + item.label );
}
});
}
});
// Start
$("#autocomplete")
// don't navigate away from the field on tab when selecting an item
.on( "keydown", function( event ) {
if ( event.keyCode === $.ui.keyCode.TAB &&
$( this ).autocomplete( "instance" ).menu.active ) {
event.preventDefault();
}
})
.catcomplete({
source: function( request, response ) {
$.getJSON( "search.php", {
term: extractLast( request.term )
}, response );
},
appendTo: ".search-results",
search: function() {
// custom minLength
var term = extractLast( this.value );
if ( term.length < 2 ) {
return false;
}
},
focus: function() {
// prevent value inserted on focus
return false;
},
select: function( event, ui ) {
log(ui.item.category + ui.item.value);
var terms = split( this.value );
// remove the current input
terms.pop();
// add the selected item
terms.push( ui.item.value );
// add placeholder to get the comma-and-space at the end
terms.push( "" );
this.value = terms.join( ", " );
return false;
},
close: function (event, ui) {
if (!$("ul.ui-autocomplete").is(":visible")) {
$("ul.ui-autocomplete").show();
}
}
});
} );
HTML
<input id="autocomplete" size="50" placeholder="Enter a search term">
<div class="search-results"></div>
<div class="selected-results"></div>
Я чувствую, что я рядом, но я просто не знаю, как это сделать, это сводит меня с ума. Любой совет будет очень признателен.
Спасибо