Как проверить, был ли открыт раскрывающийся список автозаполнения jqueryUI - PullRequest
6 голосов
/ 09 декабря 2011

Форма jQgrid содержит несколько полей автозаполнения jQueryUI.

В обработчике события keydown Нажатие клавиши Esc необходимо обрабатывать, только если раскрывающийся список автозаполнения не открыт.Если раскрывающийся список автозаполнения открыт, нажмите клавишу Esc, чтобы выполнить только его действие по умолчанию (закрытие раскрывающегося списка и отмена выбора).

Как проверить, был ли открыт раскрывающийся список автозаполнения?Он может проверить наличие любого поля автозаполнения, открытого в теле документа.

jQuery.extend(jQuery.jgrid.edit, {
   beforeShowForm: function ($form) {
            var gridIdEncoded = $.jgrid.jqID($form[0].id.substring(8));
            $("#editmod" + gridIdEncoded).bind('keydown.formEvent', function (e) {
                 if (e.which === 27) {
                   // Todo: How invoke click only if any autocomplete dropdown is not opened
                   $("#TblGrid_" + gridIdEncoded + "_2 #cData").trigger("click");
                   return false;
                   }
               });
         }
     });

Обновление

Я пытался ответить доктору Молле, используя

 if (e.which === 27) {  
   alert( $('.ui-autocomplete.ui-widget:visible').length );
   if ( $('.ui-autocomplete.ui-widget:visible').length != 0 )
     // dropdown is open, allow default behaviour
     return;

но $ ('. ui-autocomplete.ui-widget: visible'). длина равна 0, если нажата esc (1, если нажата другая клавиша и раскрывающийся список открыт).Похоже, что вызывающий Esc вызывает поведение автозаполнения по умолчанию при первом закрытии выпадающего списка.Только после этого мой обработчик executud, который не находит выпадающий список.

Как это исправить?

Ответы [ 2 ]

13 голосов
/ 09 декабря 2011

Использование:

!!$($('autocompleteselector').autocomplete('widget')).is(':visible')

.. для проверки определенного автозаполнения.

Чтобы проверить, открыт ли раскрывающийся список, используйте:

!!$('.ui-autocomplete.ui-widget:visible').length
0 голосов
/ 12 июля 2012

Комментарий Андру прав. Если вы отменяете распространение события после закрытия автозаполнения, оно подавляет ESC

$('.autocomplete').bind('autocompleteclose', function(event, ui) {
return false;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...