jQuery UI Dialog如何禁用对背景输入的关注?

Jay*_*Pea 9 jquery jquery-ui jquery-tools

当您使用jQuery UI打开模式对话框时,您会注意到如果使用Tab键,您可以专注于对话框的按钮,但忽略对话框外的任何输入.我正试图用jQuery UI Tools Overlay实现同样的行为,但我不确定jQuery UI是如何做到的.它似乎没有将元素的选项卡索引设置为-1,此外,这样做将非常繁琐,因为它将涉及查找不属于对话框的所有可聚焦元素.如果您需要自动化,这将不是很好.有没有办法禁用焦点除了少数几个页面的所有元素?

Fré*_*idi 9

对话框小部件实际处理keypress事件并执行自己的Tab密钥处理.此处理忽略对话框外的可列表元素.

相关的源代码(本帖时当前版本中的第 286至305行)是:

// prevent tabbing out of modal dialogs
if (options.modal) {
    uiDialog.bind('keypress.ui-dialog', function(event) {
        if (event.keyCode !== $.ui.keyCode.TAB) {
            return;
        }

        var tabbables = $(':tabbable', this),
            first = tabbables.filter(':first'),
            last  = tabbables.filter(':last');

        if (event.target === last[0] && !event.shiftKey) {
            first.focus(1);
            return false;
        } else if (event.target === first[0] && event.shiftKey) {
            last.focus(1);
            return false;
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

请注意,TrueBlueAussie的评论是正确的,并且该对话框小部件的发布用于绑定到错误的事件.keydown应该用来代替keypress:

uiDialog.bind('keydown.ui-dialog', function(event) {
    // ...
});
Run Code Online (Sandbox Code Playgroud)