Wewnętrznie closeOnEscape
opcja jQuery UI za dialogowego jest realizowany poprzez dołączenie keyDown słuchacza do samego dokumentu . Dlatego okno dialogowe jest zamykane, gdy zdarzenie keydown przeplata się do samego najwyższego poziomu.
Jeśli więc chcesz nadal używać klawisza escape, aby zamknąć okno dialogowe i chcesz, aby klucz escape nie był propagowany do węzłów nadrzędnych, musisz samodzielnie wdrożyć funkcję closeOnEscape
, a także korzystać z funkcji metoda stopPropagation
na obiekcie zdarzenia (patrz 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();
});
}());
To, co robi, to nasłuchiwanie wszystkich zdarzeń kluczowych pojawiających się w oknie dialogowym. Jeśli wciśnięty klawisz był klawiszem Escape, zamknąłeś to okno dialogowe w normalny sposób i niezależnie od tego, co wywołuje evt.stopPropagation
, klucz keydown nie jest przepuszczany przez węzły nadrzędne.
Mam na żywo przykład pokazujący tutaj - http://jsfiddle.net/ud9KL/2/.
Dzięki. To działa. –
to nie działa, dodałem prosty alert w twoim jsfiddle wewnątrz funkcji keydown i to nigdy nie jest wywoływane :( – Yasser
Niestety closeOnEscape nie działa dla mnie, ale to wiązało się ze sztuczką –