как перехватить событие ключа jquery dialog esc?

<p>у меня есть модальное диалоговое окно jquery и другой элемент, который принимает событие esc key за диалогом. когда диалог jquery запущен, я не хочу, чтобы это событие клавиши esc распространялось. что происходит сейчас, так это то, что когда я нажимаю esc, он закрывает диалоговое окно и запускает обработчик событий esc на элементе background.</p><p>как я могу съесть событие esc key, когда диалог jquery закрыт?</p>

<p>внутренняя опция <code>closeonescape</code> диалогового окна пользовательского интерфейса jquery реализуется путем присоединения слушателя keydown к самому документу. поэтому диалоговое окно закрывается после того, как событие keydown прошло весь путь до верхнего уровня.</p><p>поэтому, если вы хотите продолжать использовать клавишу escape, чтобы закрыть диалоговое окно, и хотите, чтобы ключ escape не распространялся на родительские узлы, вам необходимо самостоятельно реализовать функциональность <code>closeonescape</code>, а также использовать метод <code>stoppropagation</code> в объект события (см. <a href="https://developer.mozilla.org/en/dom/event.stoppropagation">статью mdn по event.stoppropagation</a> ).</p><pre><code>(function() { var dialog = $('whatever-selector-you-need') .dialog() .on('keydown', function(evt) { if (evt.keycode === $.ui.keycode.escape) { dialog.dialog('close'); } evt.stoppropagation(); }); }()); </code></pre><p>то, что это делает, слушает все события нажатия клавиш, которые происходят в диалоге. если нажатой клавишей была клавиша выхода, вы закрываете диалоговое окно как обычно, и независимо от того, что вызов <code>evt.stoppropagation</code> удерживает нажатие клавиши вверх до родительских узлов.</p><p>у меня есть живой пример, показывающий это здесь - <a href="http://jsfiddle.net/ud9kl/2/">http://jsfiddle.net/ud9kl/2/</a> .</p>

<p>вам нужно закрытьoeescape ...</p><p>пример кода:</p><pre><code>$(function() { $("#popup").dialog({ height: 200, width: 400, resizable: false, autoopen: true, modal: true, closeonescape: false }); }); </code></pre><p>смотрите в прямом эфире: <a href="http://jsfiddle.net/vutdv/">http://jsfiddle.net/vutdv/</a> </p>

<p>вы можете использовать следующее</p><pre><code> $(document).keyup(function (e) { if (e.keycode == 27) { $('#yourdialogid').dialog('close') } }); </code></pre>

<p>вам нужно будет изменить код для вашего элемента за диалогом, чтобы увидеть, был ли диалог открыт, и была ли нажата клавиша выхода и игнорировать эту ситуацию.</p>