JQgrid с проверкой автозаполнения пользовательского интерфейса jquery - PullRequest
1 голос
/ 22 сентября 2011

У меня есть jqgrid, который использует автозаполнение jQueryUI в столбце. Все работает отлично, за исключением одной мелочи, если пользователь выберет «fsdfsdfsfasf» и нажмете «Enter», моя программа, конечно, взбесится и скажет, что такого элемента не существует.

Я хочу сделать некоторую проверку, поэтому, если пользователь вводит некоторые данные, которых нет в списке автозаполнения, программа автоматически помещает текст автозаполнения в "", как здесь: http://view.jquery.com/trunk/plugins/autocomplete/demo/ в поле "месяц".

Поскольку я использую автозаполнение jQueryUI, а не автозаполнение jquery, я не могу использовать опцию mustmatch.

{ 
    name: 'Brand', 
    index: 'Brand', 
    align: 'left', 
    width: 50, 
    sortable: true, 
    editable: true, 
    edittype: 'text', 
    editoptions: {
        dataInit:
        function (elem) {
            $(elem).autocomplete({
                delay: 0,
                minLength: 0,
                source: '@Url.Action("GetBrands")',
                minChars: 0,
                max: 12,
                autoFill: true,
                mustMatch: true,
                matchContains: false,
                scrollHeight: 220,
                formatItem: function(data, i, total) {
                    return data[0];
                },
                select: function (event, ui) {
                    if (ui.item.value == "Opret ny Brand...") {
                        $(function () {
                            var dialogDiv = $('#dialog');
                            var viewUrl = '@Url.Action("CreateBrand")';

                            $.get(viewUrl, function (data) {
                                dialogDiv.html(data);

                                var $form = $("#updateCarForm");
                                $form.unbind();
                                $form.data("validator", null);

                                //Check document for changes
                                $.validator.unobtrusive.parse(document);

                                //Re add validation with changes
                                $form.validate($form.data("unobtrusiveValidation").options);

                                //open dialog
                                dialogDiv.dialog('open');
                            });

                        });
                    }
                }

            })
            .data("autocomplete")._renderItem = function (ul, item) {
                return $("<li></li>")
                    .data("item.autocomplete", item)
                    .append("<a><span style='display:inline-block;width:60px;'><b>" +
                        item.value + "</b></span></a>")
                    .appendTo(ul);
           };
        }
    }
},

1 Ответ

2 голосов
/ 22 сентября 2011

Вы можете реализовать эту функцию, предоставив функцию в качестве аргумента параметра source автозаполнения и выполнив запрос AJAX самостоятельно. Что-то вроде:

$("#auto").autocomplete({
    source: function(request, response) {
        // Manually perform the AJAX request:
        var element = this.element;
        $.get('@Url.Action("GetBrands")', request, function (results) {
            // No results? Clear out the input field.
            if (!results.length) {
                element.val('');
            }
            // Notify the widget of the results.
            response(results);
        });
    }
});

(Не проверено. Возможно, потребуется настроить вызов AJAX)

При необходимости я могу предоставить удаленный пример, но концепция аналогична примеру с использованием локального источника данных: http://jsfiddle.net/andrewwhitaker/Dgfgr/

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