Самым простым способом было бы использовать действие отправки в форме в диалоговом окне, однако:
- Я не хотел запрашивать форму в диалоговом окне (например, разные браузеры по-разному обрабатывают клавишу ввода, а некоторые не всегда выполняют ввод при вводе).
- Я хотел, чтобы это работало, если пользователь нажимает на панели заголовка или панели кнопок перед нажатием Enter.
- Я хотел создать библиотечный метод, который я могу использовать для ЛЮБОГО
Диалог jQueryUI.
Компания, в которой я работаю, это 'EBL', и я избегаю глобальных возможностей ... отсюда и префикс следующих функций:
EBL.onUiDialogOpen = function (event, ui, hideX, actionFirstButtonOnEnterKey) {
if (hideX) {
// There is no option to hide the 'X' so override.
$(".ui-dialog-titlebar-close").hide();
}
if (actionFirstButtonOnEnterKey) {
/* (event.target) will give the div that will become the content
of a UI dialog, once div is 'opened' is it surrounded by a
parent div that contains title and buttonpane divs as well as
content div - so I use .parent()
...The keyup function is binded to all descendants, therefore:
-We need the e.stopPropagation() line.
-This code is NOT what you want if you DON'T want enter
key to initiate first button regardless of selected control.
*/
$(event.target).parent().bind('keydown.justWhileOpen', function (e) {
if (e.keyCode === $.ui.keyCode.ENTER) {
e.stopPropagation();
$(event.target).next('.ui-dialog-buttonpane')
.find('button:first').click();
}
});
}
};
... работает в комбинации с:
EBL.onUiDialogClose = function (event, ui) {
// Remove keyup handler when we close dialog
$(event.target).parent().unbind('.justWhileOpen');
};
Вам не нужен .onUiDialogClose, если вы используете динамически созданный div и впоследствии уничтожаете его.
Ниже вы можете увидеть, как я использую эти библиотечные функции при инициализации нединамического диалога ...
$('#divName').dialog({
//...
open: function (event, ui) { EBL.onUiDialogOpen(event, ui, false, true); },
close: function (event, ui) { EBL.onUiDialogClose(event, ui); },
//...
});
До сих пор я проверял это в IE9 и последней версии Chrome / Firefox.
Вы должны подтвердить диалог как необходимый в вашей функции 'Ok'.