jQuery UI - диалог закрывается сразу при открытии с помощью нажатия клавиши Enter / Space - PullRequest
2 голосов
/ 01 октября 2009

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

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

<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, вызвавшего открытие диалога?

1 Ответ

3 голосов
/ 01 октября 2009

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

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

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

...