Внутренне closeOnEscape
вариант Диалог JQuery UI осуществлялются путем прикрепления KeyDown слушателя к самому документу , Поэтому диалог закрывается после того, как событие keydown всплыло до верхнего уровня.
Поэтому, если вы хотите использовать ключ-побег, чтобы закрыть диалоговое окно, и вы хотите, чтобы ключ-побег распространялся на родительские узлы, вам необходимо реализовать функцию closeOnEscape
самостоятельно, а также использовать метод stopPropagation
объекта события (см. MDN article on event.stopPropagation).
(function() {
var dialog = $('whatever-selector-you-need')
.dialog()
.on('keydown', function(evt) {
if (evt.keyCode === $.ui.keyCode.ESCAPE) {
dialog.dialog('close');
}
evt.stopPropagation();
});
}());
Что это такое - это прослушивание всех событий, которые происходят в диалоговом окне. Если нажатая клавиша была клавишей эвакуации, вы закрываете диалоговое окно как обычно, и независимо от того, что вызов evt.stopPropagation
удерживает нажатие клавиши вверх от родительских узлов.
У меня есть живой пример, показывающий это здесь - http://jsfiddle.net/ud9KL/2/.
Спасибо. Это работает. –
Это не работает, я добавил простое предупреждение в свой jsfiddle внутри функции keydown, и он никогда не вызван :( – Yasser
К сожалению, closeOnEscape не работает для меня. Но это привязка сделала трюк. –