jQuery AutoComplete - результат показывает закодированные символы - PullRequest
3 голосов
/ 13 декабря 2011

Я использую следующий код для поиска в ajax-файле запроса с плагином автозаполнения:

$("input.search_bar").autocomplete("/autocomplete/", {
    scrollHeight: 300,
    minChars: 3
});

Результаты поиска представляют собой имена в кодировке HTML, такие как:

Bob's Store (действительно Bob%39s Store) Магазин Билла (действительно Bill%39s Shop) и т. д. *

В раскрывающемся списке автозаполнения отображается правильный HTML-код примерно так:

Магазин Боба Магазин Билла

Нокогда я выбираю один из результатов и результат перемещается в поле ввода, поле ввода отображает экранированное значение следующим образом:

Bob%39s Store

Как использовать плагин jQuery Autocomplete дляотформатировать результат, чтобы показать неэкранированное значение при выборе результата?

Я безуспешно пытался использовать следующую функцию плагина:

$("input.search_bar").autocomplete("/autocomplete/", {
    scrollHeight: 300,
    minChars: 3,
    formatResult: function(row) {
      return unescape(row);
    }
});

Ответы [ 3 ]

1 голос
/ 13 декабря 2011

попробуйте этот код,

$("input.search_bar").autocomplete("/autocomplete/", {
    scrollHeight: 300,
    minChars: 3,
    formatResult: function(row) {
      return $('<div/>').html(row).html();
    }
});
1 голос
/ 21 июня 2012

У меня была такая же проблема. Источником для вывода JSON был файл JSP.

Пример использования JSON показал использование одинарных кавычек для разграничения элементов подсказок, которые я изменил на двойные кавычки.

Это все еще не работало, пока я не переключился с использования тега на простое использование $ {....}. Это решило проблему. Тег автоматически выходил из вывода.

Если вы не используете Java, убедитесь, что функция, которую вы используете для генерации JSON, не выполняет автоматическое кодирование / экранирование значений. Я не замечал этого, пока не набрал имя человека с одинарной кавычкой.

0 голосов
/ 13 декабря 2011

попробуй decodeURI():

$("input.search_bar").autocomplete("/autocomplete/", {
    scrollHeight: 300,
    minChars: 3,
    formatResult: function(row) {
      return decodeURI(row);
    }
});
...