jQuery Dialog не отвечает на нажатие клавиатуры

3

У меня есть диалоговое окно подтверждения jQuery, которое не запускает событие, связанное с кнопкой по умолчанию, когда пользователь нажимает Enter; когда я использую мышь, кнопка ведет себя как ожидалось.

Кнопка "По умолчанию" ( "Отмена" ) выделяет, когда я нажимаю кнопку ввода, но ничего больше не происходит.

Это диалог:

Изображение 256386

И вот код, который создает вышеупомянутый диалог:

$(document).ready(function () {

    $('#m_btnNext').click(function (e) {
            var my_messages = 'warning';
            if (my_messages.length > 0) {
                e.preventDefault();
                $('#dialog-confirm-withdraw').html(my_messages);
                $("#dialog-confirm-withdraw").dialog("open");
                return false;
            }
            return true;    
            });

        var cascadeConfirmWithdrawMarkup = "<div id='dialog-confirm-withdraw' title='Withdraw'><p>Set on build</p></div>";
        $(cascadeConfirmWithdrawMarkup).appendTo('body').hide();

        $('#dialog-confirm-withdraw').dialog({ title: '<span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span>Withdraw Warnings',
            width: 400,
            height: 175,
            resizable: false,
            draggable: false,
            modal: true,
            autoOpen: false,
            open: function () {
                $('.ui-dialog-buttonpane button:eq(1)').focus();
            },
            buttons: {
                "Proceed with withdraw": function () {
                    $(this).dialog("close");
                },
                "Cancel": function () {
                    $(this).dialog("close");
                }
            }
        });
});

В своей простейшей форме этот код отлично работает, но я испытываю огромные трудности, выявляя виновника в своей реальной форме.

Я прокомментировал все остальные javascript, поэтому существует только указанный выше код; на консоль не регистрируются ошибки; но ничего не происходит.

Если в моем js нет очевидной ошибки, что лучший способ найти иглу в этой стоге сена?

Мазохисты могут загрузить полную html-страницу (со всеми javascript), здесь. Я использовал FF Save As "Web Page, Complete", чтобы создать этот почтовый индекс.

Имейте в виду, что я только добавляю функциональность к этой форме; Я не создал его.

  • 0
    На вашей реальной форме кнопка отмены определенно фокусируется, когда вы нажимаете ввод? Вы упоминаете выделение, но просто хотите перепроверить. Вы можете нажать Tab, чтобы переключаться между полями формы в вашем браузере, чтобы проверить это, как вы, без сомнения, уже знаете.
  • 0
    Есть ли какие-либо события нажатия клавиш, прикрепленные к документу?
Показать ещё 5 комментариев

1 ответ

1
Лучший ответ

В halcyonCommon.js у вас есть функция KeyListener(), которая вызывается при загрузке документа. Эта функция добавляет прослушиватель событий для keydown и, похоже, обрабатывает escape и вводит события keydown для всего документа:

        case KeyCode.Enter:             
            if (el.tagName == "INPUT") {                    
                switch (el.type) {
                    case "checkbox" :
                    case "password" :
                    case "radio" :
                    case "text" : 
                        {   //Check for datebox and timebox, has controller --> onblur before click OK
                            if (el.Controller && el.Controller.onblur)
                                el.Controller.onblur({target : el});

                            return oThis.clickAction(oThis._DefaultButton, e); 
                        }
                    break;                      
                    case "file" ://ThamHNguyen, added 14-NOV-06
                        return oThis.clickAction(oThis._DefaultButton, e);
                        break;

                    default:
                        return true;
                }
            } else if (el.tagName == "SELECT") {
                return oThis.clickAction(oThis._DefaultButton, e);              
            } else if (el.tagName == "HTML" || el.tagName == "BODY" || el.tagName == "TD") { //"TD" : on IE only
                return oThis.clickAction(oThis._DefaultButton, e);              
            } else if (el.tagName == "TEXTAREA" || el.tagName == "A" ) {
                return true;
            } else {
                return false; //Prevent default button of IE
            }

См. последний случай else? Удаление, которое решает проблему, но возможно, что это приведет к нежелательному поведению в другом месте вашей программы. Если это так, вам нужно добавить третий возможный случай для возврата истины (и, следовательно, обеспечения нормального поведения) в этой строке:

} else if (el.tagName == "TEXTAREA" || el.tagName == "A" )

Например:

} else if (el.tagName == "TEXTAREA" || el.tagName == "A" || el.tagName == "SPAN" )

... хотя это может быть недостаточно определенным.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню