Форма 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, который не находит выпадающий список.
Как это исправить?