Текстовое поле автозаполнения ---- значения не найдены

Я реализовал текстовое поле автозаполнения, используя функцию jquery, и получаю предлагаемые значения из БД. Все выглядит хорошо.

Но если совпадающие данные не найдены, я хочу отобразить какое-то удобное для пользователя сообщение о том, что «совпадение не найдено» для пользователя, и очистить текстовое поле. как я могу реализовать это?

добавил текущий код

function txtAutoComplete(acUrl, minLength, txtbxId) {
    $("#" + txtbxId).autocomplete({
        minLength: minLength, 
        source: function (request, responseFn) {
                $.post(acUrl, null, function (resp) {
                var txtValue = $.ui.autocomplete.escapeRegex(request.term);
                var matcher = new RegExp("^" + txtValue, "i");
                var a = $.grep(resp, function (item, index) {
                    return matcher.test(item);
                });
                responseFn(a);
            });
        }

Спасибо Юрию Рожовецкому.

var error = 'No match';
if (a.length == 0) {
    responseFn(error);
}
else {
    responseFn(a);
}

Но предложение об ошибке отображается вертикально, как мне сделать так, чтобы оно отображалось как обычное автопредложение. Спасибо


person user2067567    schedule 01.03.2013    source источник
comment
вы можете реализовать это, используя правила javascript и css, разметку html и (возможно) технологию на стороне сервера (по вашему выбору), может быть, есть поддержка предварительной сборки для отображения пользовательских сообщений.... PS, пожалуйста, покажите какой-нибудь код, который вы попробовал. как мы должны угадать название плагина ???   -  person Dakait    schedule 01.03.2013
comment
взгляните на поле со списком автозаполнения. Я думаю, это то, что вам нужно jqueryui.com/autocomplete/#combobox   -  person bipen    schedule 01.03.2013
comment
Какой у вас текущий код/какой плагин вы используете?   -  person Bernie    schedule 01.03.2013
comment
обновил мой вопрос. Добавлен код   -  person user2067567    schedule 01.03.2013
comment
@Sudhir, да, я попробовал и опубликовал код. Я сомневаюсь, что если поиск не найден, и я хочу отобразить пользователя   -  person user2067567    schedule 01.03.2013


Ответы (3)


Вы можете сделать все это в исходной функции:

source: function (request, responseFn) {
    $.post(acUrl, null, function (resp) {
        var txtValue = $.ui.autocomplete.escapeRegex(request.term);
        var matcher = new RegExp("^" + txtValue, "i");
        var a = $.grep(resp, function (item, index) {
            return matcher.test(item);
        });

        if(a.length == 0){
            alert("No matches found");
            $("#" + txtbxId).val("");
        }
        responseFn(a);
    });
}
person Yuriy Rozhovetskiy    schedule 01.03.2013
comment
Я не хочу показывать это в предупреждении. Я хочу отправить это как ответ, который будет показан пользователю. Я пробовал, но он отображается вертикально? Отредактировал мой вопрос с кодом - person user2067567; 09.03.2013

Изменил мой код, как предложил Юрий Рожовецкий, с небольшими изменениями, чтобы отправить JSON, который работал.

var error = ["No match"];
if (a.length == 0) {
    responseFn(error);
}
else {
    responseFn(a);
}
person user2067567    schedule 09.03.2013

Вы можете вернуть это значение в сценарии, который возвращает значение.

Вместо того, чтобы ничего не возвращать, просто проверьте, есть ли у вас какие-то значения, и если нет, верните массив с одним значением, содержащим значение «Совпадения не найдены».

person Merec    schedule 01.03.2013
comment
То, что вы сказали, логично, но как вы решаете проблему, связанную с селектируемостью элемента "No matches found"? надо как то отключить - person Engineer; 01.03.2013