#javascript #jquery #autocomplete #jquery-autocomplete #jquery-ui-autocomplete
#javascript #jquery #автозаполнение #jquery-автозаполнение #jquery-ui-автозаполнение
Вопрос:
В основном я хочу показать изображение и, кроме того, текст. Это мой код автозаполнения:
$("#tagBox").autocomplete({
source: '/Friends/FriendsTagHandler.aspx?FileID=<%=Request.QueryString["FileID"] %>',
scroll: true,
scrollHeight: 300,
formatItem: function (data, i, n, value) {
console.log(values);
var values = value.split(".");
return "<img src='/images/ProfileAvatar/ProfileImage.aspx?AccountID=" values[0] "'/> " values[1];
},
formatResult: function (data, value) {
console.log(value);
return value.split(".")[1];
}
});
Однако мои my formatItem или formatResult не вызываются, и я не получаю никаких ошибок в консоли firebug.
Обновление: я где-то читал на самом SO, что formatItem устарел, и мы должны возвращать форматированные данные с самого сервера. Итак, я вернул форматированные данные со своего сервера:
Фрагмент
foreach (var item in friends)
{
sb.Append("<img src='/images/ProfileAvatar/ProfileImage.aspx?AccountID=" item.AccountID.ToString() "'/>" item.FirstName " " item.LastName).
Append(Environment.NewLine);
}
//context.Response.ContentType = "text/plain";
context.Response.Write(sb.ToString());
Когда я нажимаю URL-адрес в браузере, я могу правильно видеть изображение и имя, кроме него. Однако в окне автозаполнения ничего не отображается.
Комментарии:
1. Может ли быть какой-либо
eval
сбой из-за неправильного возврата данных?2. Не знаю, почему ничего не работает! Я вернул простые данные, разделенные новой строкой, но я ничего не получаю в своем автозаполнении. Я включил jquery-ui-1.8.16.custom.js , jquery.ui.autocomplete.min.js , jquery.ui.autocomplete.css и, конечно, jquery. Я нажал точку останова на своей странице, но в окне автозаполнения ничего не отображается.
Ответ №1:
Вы получаете автозаполнение jQueryUI, и это предок, автозаполнение jQuery запутано. Автозаполнение jQueryUI не имеет параметров formatItem
, formatResult
, scroll
, или scrollHeight
.
Чтобы выполнить то, что вам нужно, вам нужно переопределить _renderItem
функцию, как в этом примере:
$("#tagBox").autocomplete({ ... })
._renderItem = function (ul, item) {
// Custom item display logic here.
};
Кроме того, ваши source
данные должны быть функцией, которая возвращает данные, сами данные или URL, который возвращает данные в следующем формате:
- Массив строк:
['option1', 'option2', 'option3']
, или - Массив объектов со свойством
label
илиvalue
(или оба):[{ label: 'option1', value: 'option1'}, { ... }]
Ответ №2:
Во-первых, я не вижу никакого formatItem
или ‘formatResult’ в пользовательском интерфейсе Jquery, вот что я сделал для этого и убедитесь, что вы возвращаете объект JSON
When a String is used, the Autocomplete plugin expects that string to point to a URL resource that will return JSON data. It can be on the same host or on a different one (must provide JSONP). The request parameter "term" gets added to that URL
http://jqueryui.com/demos/autocomplete/#remote-jsonp
$("#tagBox").autocomplete({
source: "@Url.Action("Search", "Person")",//I'm using asp.net MVC here
select: function (event, ui) {
$(this).val( ui.item.Name );
return false;
}
}).data("autocomplete")._renderItem = function (ul, item) {
var term=$(#tagBox).val();
return $("<li style="background-color:Yellow" ></li>")
.data("item.autocomplete", item)
.append("<a>" "<img src=/images/ProfileAvatar/ProfileImage.aspx?thumbnailId=" item.ImageId "'></img>" item.Name.replace(new RegExp('(' item.Term ')', 'gi'), "<b>$1</b>") "</a>").appendTo(ul);
};
И мой код контроллера ,
IList<Person> people= new List<Person>();
// people.Add() here
return Json(people);
И мой класс person,
public class Person
{
public int Id{ get; set; }
public string Name { get; set; }
public int ImageId
{
get;
set;
}
}