jquery-ui对话框:在对话框中创建一个默认操作按钮(Enter键)

fgu*_*gui 55 javascript jquery jquery-ui modal-dialog

在jquery模式对话框中,有没有办法选择按钮作为默认操作(当用户按下回车时要执行的操作)?

jquery网站示例: jquery对话框模态消息

在上面的示例中,当用户按下Esc时,对话框将关闭.我想在用户按Enter时调用"Ok"按钮动作.

Nic*_*ver 36

在对话框的打开功能中,您可以对焦按钮:

$("#myDialog").dialog({
    open: function() {
      $(this).parents('.ui-dialog-buttonpane button:eq(0)').focus(); 
    }
});
Run Code Online (Sandbox Code Playgroud)

更改:eq(0)if是否在不同的索引,或按名称查找等.

  • 是的,我确实打开了:`function(){$(this).parent().find('.ui-dialog-buttonpane button:eq(1)').focus(); } .` (9认同)
  • 我刚刚编写代码使用$(this).parent().find('button:nth-​​child(1)').focus(); 这是类似的.谢谢 (5认同)
  • 我不认为这种方法适用于较新版本的jQuery UI.对话框的DOM现在似乎有div.ui-dialog-buttonpane作为兄弟,而不是$(this)的父级.查看下面的madeuz的答案.zesc的答案将包括对话框的标题栏"x".Gabriel的答案与madeuz的答案基本相同,只是遍历有点不同. (4认同)
  • 我发现它有效,但设置焦点与使按钮默认设置不同.如果div中有其他控件,那么一旦选中它们,按钮将不再具有焦点?当然需要一个keydown事件? (2认同)

Eug*_*iró 33

我喜欢这个(它适合我),它将焦点留在我想要的位置(文本框)

    $("#logonDialog").keydown(function (event) {
        if (event.keyCode == $.ui.keyCode.ENTER) {
            $(this).parent()
                   .find("button:eq(0)").trigger("click");
            return false;
        }
    });
Run Code Online (Sandbox Code Playgroud)

但是,这只适用于一个按钮(确定按钮),如果需要':eq(n)'可以设置为选择其他按钮.

注意:我添加了一个返回false的新行,以防止在处理回车键时事件冒泡,我希望它比以前更好.

  • 这是要走的路.设置焦点(如其他解决方案中所示)将使使用标签转到其他字段但仍希望在表单中的任何位置点击"输入"的高级用户陷入困境. (6认同)

mad*_*euz 20

试试这种方式:

$("#myDialog").dialog({
    open: function() {
         $(this).siblings('.ui-dialog-buttonpane').find('button:eq(1)').focus(); 
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说也适用于jQuery UI 1.10.接受的答案没有. (4认同)
  • 这似乎与较新版本的jQuery UI(在1.9.2中测试)创建的DOM相匹配.查看http://jsfiddle.net/KF3pp/1/以获取不涉及的模式:eq(x) (2认同)

Tho*_*mas 12

这个其他stackoverflow问题可以让你到达你想要的地方:

$('#DialogTag').keyup(function(e) {
    if (e.keyCode == 13) {
        //Close dialog and/or submit here...
    }
});
Run Code Online (Sandbox Code Playgroud)


Mar*_*k B 8

另一个让您可以更好地控制对话框中所有按钮的选项是将它们添加为按钮数组.然后在open事件中,您可以通过id获取按钮并执行您想要的任何操作(包括设置焦点)

$('#myDialog').dialog({
    buttons: [  
                {
                    id: "btnCancel",
                    text: "Cancel",
                    click: function(){
                        $(this).dialog('close');
                    }
                },
                {
                    id: "btnOne",
                    text: "Print One",
                    click: function () {
                        SomeFunction(1);
                    }
                },
                {
                    id: "btnTwo",
                    text: "Print Two",
                    click: function(){
                        SomeFunction(0);
                    }
                }
            ],
    open: function () {
        if ($('#hiddenBool').val() != 'True') {
            $('#btnOne').hide();
        }
        $("#btnTwo").focus();
    }
});
Run Code Online (Sandbox Code Playgroud)


mat*_*rns 5

使用按钮名称作为选择器稍有不同.它看起来好一点,但按钮文本字符串明显重复.重构味道.

$("#confirm-dialog").dialog({
    buttons: {
        "Cancel" : function(){},
        "OK" : function(){}
    },
    open: function() {
        $(this).siblings('.ui-dialog-buttonpane').find("button:contains('OK')").focus(); 
    }
});
Run Code Online (Sandbox Code Playgroud)