Автозаполнение JQuery при ошибках диалога - PullRequest
3 голосов
/ 14 мая 2009

All

Я использую плагин автозаполнения JQuery 1.0.2 в диалоге интерфейса пользователя JQuery. К сожалению, есть 2 сценария, которые вызывают ошибки сценария в IE и FireFox. Я буду предоставлять ошибки FireFox Firebug, поскольку они более наглядны.

Прежде всего, вот сценарий автозаполнения JQuery, который позволяет выбрать несколько имен:

var queues = <% Html.RenderAction("AvailableQueues"); %>;
$($.jqId("requestQueuesText"), $theForm).autocomplete(queues, {
    minChars: 1,
    formatItem: function(row) {
        return row.Description;                
    },
    multiple: true,
    multipleSeparator: ";"
 });

Теперь, вот два сценария, которые вызывают ошибки:


1) Наберите пробел "" раньше всего, и я сразу получу

ОШИБКА: currentValue не определено ; onChange () jquery.a ... mplete.js (строка 239); [Прервать эту ошибку] ​​if (currentValue.length> = options.minChars) {

2) Закрыть диалоговое окно, когда раскрывающийся список автозаполнения открыт, но без выбора элемента

* Это сообщенная ошибка , которую я должен исправить. После закрытия диалогового окна поле автозаполнения будет оставаться в поле зрения от нескольких миллисекунд до нескольких секунд. Основная цель - чтобы раскрывающийся список автозаполнения закрывался одновременно с закрытием диалогового окна без каких-либо ошибок. Держу пари, что устранение ошибок решит общую проблему.

ОШИБКА: необработанное исключение : [Исключение ... »Компонент возвратил код ошибки: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMNSHTMLTextAreaElement.setSelectionRange]" nsresult: "0x80004005:" "JILSER_RES_NER) http://localhost:2659/Scripts/jquery.autocomplete.js :: аноним :: строка 752 "данные: нет]


Просто просматривая документацию по автозаполнению , я вижу, что мне может понадобиться использовать параметр formatItem по-другому.

Кроме того, я натолкнулся на BGIFRAME , который, похоже, мог так или иначе помочь.

Заранее спасибо за любую помощь!

1 Ответ

1 голос
/ 15 мая 2009

Мне удалось решить первую проблему, связав событие keydown с кодом автозаполнения:

var queues = <% Html.RenderAction("AvailableQueues"); %>;
    $($.jqId("requestQueuesText"), $theForm).autocomplete(queues, {
        minChars: 1,
        formatItem: function(row) {
            return row.Description;                
        },
        multiple: true,
        multipleSeparator: ";",
        selectFirst: false
    }).keydown(function(event) {
        if (this.value != "" && this.value.charAt(this.value.length-1) != ";")
            return true;

        var keycode = $.browser.msie ? event.keyCode : event.which;
        return !/\s/.test(String.fromCharCode(keycode));
    });

Это запрещает пробелы при первоначальном вводе текста в текстовую область, а также предотвращает пробелы после точки с запятой (множественныйSeparator).

Все еще возникают проблемы с # 2. Я думаю, что мне нужно добавить событие hover или click для свойства Close или $ ('a.close-trigger') , которое удалит focus () из текстовой области, которая в свою очередь заставляет выпадающий список автозаполнения исчезать ... Пока не знаю точно, как это сделать с помощью следующего диалогового кода:

$(".requestLink").click(function(event) {
        event.preventDefault();
        var $this = $(this);
        $this.addClass("loading");
        $.get(this.href, function(data) {
            $this.removeClass("loading");
            var $req = $("<div></div>").dialog({
                autoOpen: true,
                height: 650,
                width: 750,
                modal: true,
                title: "Request",
                overlay: { "background-color": "#d2d2d2", "opacity": "0.40"}
            }).html(data);
        });
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...