#javascript #jquery #ajax #json #jquery-ui-autocomplete
#javascript #jquery #ajax #json #jquery-ui-автозаполнение
Вопрос:
Я хотел бы использовать автозаполнение jQuery в проекте Drupal для автоматического поиска узлов (фрагментов содержимого) с заданным заголовком. Я не могу найти ни одного примера использования опций, которые соответствуют тому, что я пытаюсь сделать, а именно:
- URL-адрес должен соответствовать шаблону: /api/node/title/{независимо от того, что ввел пользователь}
- Когда результаты возвращаются в формате JSON, заголовок должен использоваться в списке автозаполнения
- При нажатии на результат над текстовым полем появится стилизованный абзац, содержащий заголовок, но на самом деле он будет содержать идентификатор узла (nid) выбранного узла.
Вот что у меня есть до сих пор:
jQuery(this).autocomplete({
source: '/api/node/title/' jQuery(this).val(),
minLength: 2
}).data( "autocomplete")._renderItem = function(ul, item) {
return jQuery('<li />')
.data("item.autocomplete", item)
.appendTo(ul);
};
Я даже не стал беспокоиться о том, что делать после выбора элемента — URL-адрес отображается как /api/node/title?term={blank} , и хотя я получаю результаты JSON, ничего не появляется. Какие-либо предложения или примеры аналогичного использования? Примеры автозаполнения на веб-сайте jQuery UI не были особенно полезными.
РЕДАКТИРОВАТЬ: вот пример ожидаемого ответа.
{
"nid":"2",
"vid":"2",
"type":"lorem",
"language":"und",
"title":"Grid Computing",
"uid":"0",
"status":"1",
"created":"1320092886",
"changed":"1320273538",
"comment":"1",
"promote":"1",
"sticky":"0",
"tnid":"0",
"translate":"0"
}
Комментарии:
1. не могли бы вы, пожалуйста, опубликовать пример ответа, который вы ожидаете от URL, и определить, что вы подразумеваете под заголовком?
Ответ №1:
для 1) вы можете использовать обратный вызов для источника
$('input').autocomplete({
source: autoDrupal,
minLength: 2});
function autoDrupal(requestObject, responseCallback) {
var url = '/api/node/title/' requestObject.term;
$.get(url, function(data) {
// check my fiddle to transform drupal response in autocomplete result ;)
responseCallback(data);
});
};
для 2) Я не понимаю, что вы подразумеваете под «заголовком», но это, безусловно, можно обработать в ответе $.get
для 3) обработчик событий может сделать трюк (как только я пойму ваш страшный «заголовок»). что-то вроде этого:
$('ul.ui-autocomplete').delegate('li', 'click', function () {
$('#stuff').css('color', 'red');
})