jquery автозаполнение изменения источника данных - PullRequest
0 голосов
/ 23 июня 2011

Я установил автозаполнение jquery, которое изменяет источник данных в зависимости от ввода в текстовом поле.

После изменения источника данных в jquery он не срабатывает до тех пор, пока не будет нажата кнопка со стрелкой вверх или вниз.

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

Может кто-нибудь показать мне, как отправить клавишу со стрелкой вверх или вниз на элемент управления или решить эту проблему любым другим способом?

Большое спасибо!

edit: я заменил это на JSON следующим образом, но кажется, что запрос приходит с сообщением об ошибке

jQuery (function () { JQuery ( "вход # автополный"). автополный ({ contentType: 'application / json; кодировка = UTF-8' , dataType: 'json', mustMatch: false, предел: 10, minChars: 2,

            select: function (event, ui) {
                AutoCompleteSelectHandler(event, ui)
            }
            ,
            source: function (request, response) {
                jQuery.ajax({
                    url: "http://localhost/integration/webservices/PostcodeJSON.asmx/GetPostCodeListJSONfromSuburb",
                    data: {},
                    dataType: "json",
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    dataFilter: function (data) { return data; },
                    success: function (data) {
                        alert(data);
                    },
                    error: function (XMLHttpRequest, textStatus,

errorThrown) { оповещения (textStatus); } }); } });

    });

есть это поле ввода html.

Что я здесь не так сделал? Я подтвердил, что веб-сервис работает правильно.

edit2: я внес следующие изменения:

jQuery (function () { JQuery ( "вход # автозаполнения"). автозаполнения ({

            minChars: 2,

            select: function (event, ui) {
                AutoCompleteSelectHandler(event, ui)
            }
            ,
            source: function (request, response) {
                jQuery.ajax({
                    url: "http://localhost/integration/webservices/PostcodeJSON.asmx/GetPostCodeListJSONfromSuburb",
                    data: '{ Suburb: "' +

jQuery ("# ​​autocomplete"). Val () + '"}', dataType: "json", тип: "POST", contentType: "application / json; charset = utf-8", dataFilter: function (data) {return data.d; }, success: function (data) { оповещения (data.d); }, ошибка: функция (XMLHttpRequest, textStatus, errorThrown) { оповещения (textStatus); } }); } });

    });

поэтому предупреждение работает нормально. Но JQuery не показывает совпадающий список. Как мне это сделать?

РЕДАКТИРОВАТЬ 2:

Мне удалось решить проблему с веб-сервисом. Как настроить ответ, чтобы автозаполнение отображало список соответствующим образом? На данный момент каждый элемент в списке показывает мне полный список элементов.

т.е.), если я наберу 'ab' и если совпадения совпадут с 3, это покажет мне один и тот же результат 3 раза в 3 разных строках.

У меня есть настройки jquery, как показано ниже:

jQuery (function () { JQuery ( "вход # автозаполнения"). автозаполнения ({

            minChars: 2,

            select: function (event, ui) {
                AutoCompleteSelectHandler(event, ui)
            }
            ,
            source: function (request, response) {
                jQuery.ajax({
                    url: "http://localhost/integration/webservices/PostcodeJSON.asmx/GetPostCodeListJSONfromSuburb",
                    data: '{ Suburb: "' + jQuery("#autocomplete").val() + '" }',
                    dataType: "json",
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    dataFilter: function (data) { return data; },
                    success: function (data) {

                                                    response($.map(data.d, function (item) {
                                                        return {
                                                            value: data.d
                                                        }
                                                                                }))


                    },
                    error: function (XMLHttpRequest, textStatus, errorThrown) {
                        alert(textStatus);
                    }
                });
            }
        });

Любая помощь будет высоко оценена, большое спасибо!

1 Ответ

0 голосов
/ 27 июня 2011

У меня все работает, но я не уверен, что элемент становится просто строковым массивом, а не объектом JSON. Я пытался проанализировать каждый элемент как JSON, но, похоже, не работает.

Вот рабочий jquery json с jquery-комбинациями веб-сервиса.

jQuery (function () { JQuery ( "вход # автозаполнения"). автозаполнения ({

            minChars: 2,

            select: function (event, ui) {
                AutoCompleteSelectHandler(event, ui)
            }
            ,
            source: function (request, response) {
                jQuery.ajax({
                    url: "http://localhost/integration/webservices/PostcodeJSON.asmx/GetPostCodeListJSONfromSuburb",
                    data: '{ Suburb: "' + jQuery("#autocomplete").val() + '" }',
                    dataType: "json",
                    type: "POST",
                    minChars: 2,
                    contentType: "application/json; charset=utf-8",
                    dataFilter: function (data) { return data; },
                    success: function (data) {
                        var obj = jQuery.parseJSON(data.d);
                        response($.map(obj, function (item) {
                            var item_obj = jQuery.parseJSON(item);
                            return {
                                value: item[1]


                            }
                        }))


                    },
                    //                        parse: function (data) {
                    //                            var parsed = [];
                    //                            data = data.d;

                    //                            for (var i = 0; i < data.length; i++) {
                    //                                parsed[parsed.length] = {
                    //                                    data: data[i],
                    //                                    value: data[i].value,
                    //                                    result: data[i].value
                    //                                };
                    //                            }

                    //                            return parsed;
                    //                        },
                    //                        formatItem: function (item) {
                    //                            return item.value;
                    //                        },
                    error: function (XMLHttpRequest, textStatus, errorThrown) {
                        alert(textStatus);
                    }
                });
            }
        });



    });
...