Автозаполнение форматирования не вызывается, ни какая-либо ошибка в firebug

#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;
        }
}