Как предотвратить открытие автозаполнения jqueryUI при быстром вводе - PullRequest
2 голосов
/ 05 сентября 2011

jQueryUI автозаполнение добавляется к элементу ввода текста, используя код ниже в форме. Если вводится текст и быстро нажимается вкладка, курсор перемещается в другой столбец, но меню автозаполнения остается открытым.

Как предотвратить открытие меню автозаполнения в этом случае. Вероятно, событие размытия должно прервать вызов поиска данных меню автозаполнения drowpdowm, чтобы раскрывающееся меню не открывается после получения данных с сервера или что-то подобное? Я пытался добавить input.autocomplete ('close'), чтобы размыть, но это не помогает. Вероятно, размытие происходит до того, как данные получены с сервера и до открытия автозаполнения.

вход содержит входные данные type = 'text' ссылка на объект.

input.autocomplete({
        source: 'GetLookupList',
        position: { collision: 'flip flip' }
    }
   );

$(input).bind({
        keydown: function (e) {
            if (enter(e) || (e.ctrlKey && e.keyCode === 83)) {
                input.autocomplete('close');
            }
        },
        blur: function (e) {
             input.autocomplete('close');
        }
    });

1 Ответ

1 голос
/ 18 октября 2011

Я собирался написать ответ в разделе комментариев, но я хотел прикрепить некоторый код.

Я в основном сделал то же самое, что и вы, и связал keydown для закрытия клавиши enterautocomplete затем вызывает событие click на кнопке, прикрепленной к окну поиска.

$('input[id$=MainSearchBox]').bind(
    {
        keydown: function(e)
        {
            if (e.which === 13)
            {
                $('input[id$=MainSearchBox]').autocomplete('close');
                $('input[id$=MainSearchBox]').autocomplete('disable');
                $('input[id$=MainSearchBoxGoButton]').click();
                e.preventDefault()
                return false;
            }
        }
    });

Похоже, что это самая прямолинейная вещь, которую можно сделать.Я читал кое-что о исправлении, которое выйдет в следующем выпуске, но сейчас я думаю, что это решение будет работать.

РЕДАКТИРОВАТЬ: обновил код, чтобы отключить автозаполнение, позволить клику пройти, и когда метод pageLoad, содержащийся в нем, вызывается при частичном постбэк, он перестроит объект автозаполнения.Я волнуюсь, что это, вероятно, не самый умный или самый эффективный способ сделать это, но, похоже, работает ...

...