jQuery UI - диалоговое окно закрывается сразу после открытия с помощью onkey, нажмите Enter / Space

Я хочу открыть диалоговое окно пользовательского интерфейса jQuery, когда пользователь нажимает клавишу ввода или пробела для данного элемента. Похоже, что клавиши ввода / пробела обрабатываются диалоговым окном, что вызывает нажатие элемента по умолчанию (кнопка отмены). Диалог закрывается почти сразу после открытия.

Вот упрощенная демонстрация:

<script type="text/javascript">
    function Go() {
        $("#dialog").text("Are you sure?").dialog({
            modal: true,
            buttons: {
                Cancel: function() {
                    $("#dialog").dialog("destroy");
                },
                OK: function() {
                    $("#dialog").dialog("destroy");
                }
            }
        });  // end .dialog
    }
</script>

<input type="button" value="Test" onkeydown="Go()" />
<div title="Dialog" style="display: none;" id="dialog"></div>

Если кнопке предоставляется фокус, а затем пользователь нажимает пробел, открывается диалоговое окно, а затем немедленно закрывается. Если пользователь нажимает клавишу ввода, диалоговое окно закрывается так быстро, что даже не мигает (по крайней мере, так было в моем опыте с Firefox 3.5.3).

Как запретить диалоговому окну обрабатывать ключ из события onkeydown, которое вызвало открытие диалогового окна?


person Joel Harris    schedule 01.10.2009    source источник


Ответы (1)


Попробуйте onkeyup, если он есть. Если это сработает, я дам вам объяснение (Занято).

Редактировать объяснение: это в основном потому, что событие onkeydown не вызывается один раз, оно вызывается постоянно, пока оно нажато, и поскольку компьютеры работают так быстро (1 секунда для них вечность), оно вызывается много раз за одно нажатие. Решение состоит не в том, чтобы вызывать его, когда он толкается вниз, а в том, чтобы вызывать его в верхней части (когда вы отпускаете).

Все время случается в электронике с переключателями, логическими вентилями и т. Д. Я забыл технические термины.

person UK-AL    schedule 01.10.2009
comment
onkeyup не закрывает диалог автоматически. С нетерпением жду вашего объяснения :) - person Joel Harris; 01.10.2009
comment
Это главным образом потому, что onkeydown не вызывается один раз, он вызывается постоянно, пока он нажат, и поскольку компьютеры работают так быстро, он вызывается много раз за одно нажатие. Решение вызывается не тогда, когда оно опускается, а вызывает его на верхней части (когда вы отпускаете). Бывает все время в электронике с переключателями и т. Д. Я забыл технические термины. - person UK-AL; 01.10.2009
comment
Эффект называется «дребезг», когда речь идет о переключателях. - person belugabob; 01.10.2009