Автозаполнение jQuery: проблема с параметром matchSubset - PullRequest
0 голосов
/ 27 декабря 2010

У меня есть текстовое поле с установленным автозаполнением и работает отлично. Однако, когда я пытаюсь использовать параметр matchSubset, он выдает ошибку в файле autocomplete.js на

if (!options.matchCase)
    s = s.toLowerCase();
var i = s.indexOf(sub);

в функции matchSubset. Выдает ошибку «Объект не поддерживает это свойство или метод». Ниже мой код автозаполнения:

$('#txtUsers')
    .autocomplete("AjaxHandler.asmx/GetUserData", {
        width: 320,
        max: 10,
        minChars: 3,
        matchSubset: true,
        formatItem: function(data, i, n, value) {
            return value.FullName + " (" + value.DepartmentName + ")";
        },
        parse: function(data) {
            var items = eval($(data).text());
            return $.map(items, function(row, i) {
                return {
                    data: row,
                    value: row,
                    result: row
                }
            });
        }
    })
    .result(function(event, data, formatted, text) {
        if (data) {
            $(this).val(data[0].FullName);
        }
    });

В первый раз, когда я набираю 3 символа, он работает нормально. Однако, когда я набираю свой 4-ый символ, это дает мне вышеупомянутую ошибку. Это то, что я делаю какую-то ошибку в анализе моих данных? Мне пришлось оценивать данные в функции разбора, потому что мой веб-сервис выдает мне упакованные данные. Если я уберу опцию matchSubset, код будет работать нормально, но каждый раз будет запрашивать сервер. Любая помощь? <Ч /> ОБНОВЛЕНИЕ: я думаю, что проблема с моей функцией разбора. В приведенном выше коде в функции matchSubset ожидается, что 's' будет строковым значением, тогда как для меня это объект, содержащий несколько значений, таких как FullName, DepartmentName и т. Д. Как я могу соответственно изменить свою функцию синтаксического анализа?

1 Ответ

1 голос
/ 27 декабря 2010

Ну, я думаю, вы должны изменить value на строку (отказ от ответственности: я не знаю, как работает jQuery.autocomplete, я просто знаю, как вы можете получить строку в правильном месте :)).Итак, используйте что-то вроде:

value: row.FullName + " (" + row.DepartmentName + ")"

Кроме того, проверьте data еще, может быть, он пытается eval дважды?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...