Автозаполнение formatItem не вызывается, ни одной ошибки в firebug
В основном я хочу показать изображение и помимо него текст. Это мой код автозаполнения:
$("#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.
Update: я где-то читал на 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 в браузере, я могу правильно видеть образ и имя помимо него. Однако на самом деле ничего не появляется в поле автозаполнения.
2 ответа:
Во-первых, я не вижу никаких
formatItem
или 'formatResult' в jQuery UI, вот что я сделал, чтобы сделать это и убедиться, что вы возвращаете объект 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);
И мой личный класс,
public class Person { public int Id{ get; set; } public string Name { get; set; } public int ImageId { get; set; } }
Вы получаете jQuery autocomplete и это предок, jQuery autocomplete запутался. 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'}, { ... }]