Я получил следующий код:JQuery
function testSearch() {
$(".searchfield").autocomplete({
source: function (request, response) {
$.ajax({
url: "{{ path('my_search') }}",
dataType: "json",
data: {
term: request.term
},
success: function (data) {
response($.map(data, function (item) {
return {
label: item.label,
value: item.value
}
}));
}
});
},
minLength: 1,
select: function (event, ui) {
$.each(ui, function (key, value) {
window.location = "{{ path('my_show_product', {'productId': ''}) }}" + "/" + value
});
},
focus: function (event, ui) {
/* $.each(ui, function(key, value) {
alert(key + " " + value);
});*/
},
})
$.ui.autocomplete.prototype._renderItem = function (ul, item) {
var a = $('<a>', {
href: "{{ path('my_show_product', {'productId': ''}) }}" + "/" + item.value,
text: item.label
});
var $li = $('<li></li>', {
style: "width:100%"
});
return $li.append(a).data('item.autocomplete', item.value).appendTo(ul);
};
}
мои данные возвращается из функции, называемой функцией $.ajax
выше, в этом формате JSON:
[ { label: 'test label', value: '1234' }, { label: 'test label1', value: '4567' } ]
поле ввода выглядит следующим образом:
<input type="text" class="searchfield" name="searchfield" value="Search for Products" />
до сих пор, я могу искать предметы и получить Ресул ts в указанном выше формате, отображаемом на лицевой стороне в списке. Каждый пункт ссылается на страницу http://mydomain/products/(value)
В настоящее время возникает следующая проблема: если я что-то искал и появился список поиска, я могу перемещаться по моей клавиатуре через список, нажимать кнопку ввода и перенаправляться на надлежащей страницы, но полные метки каждого элемента, который я фокусирую, не отображаются в поле ввода, показанное выше.
Как я могу это достичь?
EDIT: поэтому я попытался изменить код к следующему:
function testSearch() {
$(".searchfield").autocomplete({
source: function(request, response) {
$.ajax({
url: "{{ path('my_search') }}",
dataType: "json",
data: {
term: request.term
},
success: function(data) {
response($.map(data, function(item) {
return {
label: item.label,
value: item.value
}
}));
}
});
},
minLength: 1,
select: function(event, ui) {
$.each(ui, function(key, value) {
window.location = "{{ path('my_show_product', {'productId': ''}) }}"+"/" + value
});
},
focus: function(event, ui){
$('.ui-autocomplete-input').val(ui.item.label);
$(this).val(ui.item.label);
//alert($('#searchfield')[0].className);
//alert(ui.item.label);
//$(this).val($(ui.item).text());
// $('.searchfield').val($(this).val(ui.item.label));
}
})
$.ui.autocomplete.prototype._renderItem = function(ul, item) {
var a = $('<a>', {
href: "{{ path('my_show_product', {'productId': ''}) }}"+"/" + item.value,
text: item.label
});
var $li = $('<li></li>', {style:"width:100%"});
return $li.append(a).data('item.autocomplete', item).appendTo(ul);
};
}
но мне кажется, что ответ делает проблемы: если я оставить:
response($.map(data, function(item) {
return {
label: item.label,
value: item.value
}
}));
чем текстовое поле получает «значения» каждой метки, это не то, что я хочу. если я изменить его на:
response($.map(data, function(item) {
return {
label: item.label,
value: item.label
}
}));
я вижу надписи InThe поле ввода, но ссылка для каждого элемента в структуре http://mydomain/(label) и не http://mydomain/(value) .what я нужен последний один.
Любые идеи?
привет, спасибо. проблема в том, что в фокусном событии я могу получить доступ к метке. Если я пишу console.log (ui.item.label), он говорит undefined. если я удалю событие фокуса, я могу использовать кнопку «вниз», но я ничего не вижу в «поле поиска». – ramo
Да, вы можете получить доступ к ярлыку. Если вы хотите написать свою собственную логику, чтобы установить значение текстового поля с помощью этой метки, вы должны это сделать. Если вы просто удалите этот параметр из параметров, плагин позаботится о отображении выделенного значения в текстовом поле. – ShankarSangoli
может быть, что поведение плагина по умолчанию «разрушено», когда я выполняю функцию $ .ui.autocomplete.prototype._renderItem = (u .... в моем коде?), Даже если я удалю focus event, я не получаю никаких значений, отображаемых в текстовом поле, он просто оставляет пустым – ramo