Javascript jQuery对话框不响应键盘按下

Javascript jQuery对话框不响应键盘按下,javascript,asp.net,vb.net,jquery-ui,Javascript,Asp.net,Vb.net,Jquery Ui,我有一个jQuery确认对话框,当用户按下Enter键时,它不会触发与默认按钮关联的事件;当我使用鼠标时,按钮的行为与预期一致 当我按enter键时,默认按钮('Cancel')会突出显示,但不会发生任何其他情况 这是一个对话框: 下面是生成上述对话框的代码: $(document).ready(function () { $('#m_btnNext').click(function (e) { var my_messages = 'warning';

我有一个jQuery确认对话框,当用户按下Enter键时,它不会触发与默认按钮关联的事件;当我使用鼠标时,按钮的行为与预期一致

当我按enter键时,默认按钮('Cancel')会突出显示,但不会发生任何其他情况

这是一个对话框:

下面是生成上述对话框的代码:

$(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");
                }
            }
        });
});
$(文档).ready(函数(){
$('m#u btnNext')。单击(函数(e){
var my_messages='警告';
如果(my_messages.length>0){
e、 预防默认值();
$('#对话框确认撤消').html(my#U消息);
$(“对话框确认撤消”)。对话框(“打开”);
返回false;
}
返回true;
});
var cascadeConfirmDrumpMarkup=“在构建时设置”

”; $(cascadeConfirmDrumpMarkup).appendTo('body').hide(); $(“#对话框确认撤消”)。对话框({title:'撤消警告', 宽度:400, 身高:175, 可调整大小:false, 可拖动:错误, 莫代尔:是的, 自动打开:错误, 打开:函数(){ $('.ui对话框按钮平面按钮:eq(1)').focus(); }, 按钮:{ “继续撤消”:函数(){ $(此).dialog(“关闭”); }, “取消”:函数(){ $(此).dialog(“关闭”); } } }); });
以最简单的形式,但我很难找出真正的罪魁祸首

我注释掉了所有其他javascript,因此只有上面的代码存在;控制台上未记录任何错误;但什么也没发生

如果上面我的js中没有明显的错误,那么在大海捞针的最佳方法是什么

受虐狂可以下载完整的html页面(包含所有javascript)。我使用FF的另存为“网页,完成”来创建该zip


请记住,我只是在此表单中添加功能;我没有创建它。

在halcyonCommon.js中,有一个名为KeyListener()的函数,在加载文档时调用。该函数为keydown添加了一个事件侦听器,它似乎在为整个文档处理转义和输入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
            }
看到最后一个案例了吗?删除它可以解决问题,但这可能会导致程序中其他地方出现不希望出现的行为。如果是,则需要在此行中添加第三个可能的机会来返回true(从而允许正常行为):

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

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

…虽然这可能不够具体。

在您的真实表单上,当您按enter键时,取消按钮是否一定会显示?您提到突出显示,但只是想再次检查。您可以按tab键在浏览器上的表单字段之间切换,以测试这一点,这一点您肯定已经知道。文档是否附加了任何按键事件?我们需要查看您的真实表单中还有哪些其他事件。请张贴完整的代码。@martinownet是的。表单加载时突出显示“取消”按钮。按Tab键继续退出并按enter键也不会执行任何操作。但是,点击“X”并按enter键会关闭表单。@epascarello据我所知,没有。我发现了几个附加按键和按键事件的示例(参见Ken Browning的答案),但我无法使用它们获得响应)。在所有的闹剧中,我甚至不能让它们在示例中工作,所以我很可能遗漏了一些东西。