25

情况:

我有一个网页,它打开模式窗口(灯箱),其中包含用户可以输入数据的表单。用户通常使用键盘导航,从一个字段切换到下一个字段。

问题:

当模态窗口打开时,只有窗口处于活动状态,页面的其余部分不能使用鼠标访问,但可以通过在模态窗口中跳出来访问元素。

问题:

如何通过使用选项卡按钮将移动限制在表单窗口中的元素上?

我唯一能想到的是在打开模式窗口时使用 Javascript 设置tabindex=-1所有表单元素(和其他可聚焦元素),然后tabindex在模式窗口关闭时将值设置回它们以前的值。有没有更简单/更好的方法?

4

4 回答 4

4

怎么抓tab-key?在最后一个元素上,然后将焦点放在第一个元素上,反之亦然shift-tab

这是我在多模无对话框环境中使用的,以保持焦点在对话框中,使用鼠标或其他键在对话框之间切换

inputs=".editing, input, textarea, button, a, select"
no_tab="[type='hidden'], :disabled"

$focusable=dlg.$form.find(inputs).not(no_tab)


$fa_first=$focusable.first()
$fa_last=$focusable.last()

$fa_last.on("keydown", (evt) =>
    if evt.keyCode==9 && ! evt.shiftKey
        $fa_first.focus()
        evt.preventDefault()
        false
)
$fa_first.on("keydown", (evt) =>
    if evt.keyCode==9 && evt.shiftKey
        $fa_last.focus()
        evt.preventDefault()
        false
)

小编辑:通过 jQuery "on()" 替换了我的 on "unibind()" (=.off(x).on(x)) 函数

于 2016-06-01T13:16:04.933 回答
2

如果您想限制 dom "parent" 内的焦点

parent.addEventListener('focusout', function(event) {
    event.stopPropagation();

    if (node.contains(event.relatedTarget)) {  // if focus moved to another 
                                                              parent descend
        return;
    }

    parent.focus();  // otherwise focus on parent or change to another dom
})

所有现代浏览器都支持

于 2018-07-06T12:10:05.077 回答
1

看看jQuery BlockUI 插件。他们有一个使用带有两个按钮的模态框的示例,它也限制了选项卡。

它可能会或可能不会在您的模态窗口中开箱即用,但值得一看,而不必实施您自己的解决方法。

于 2012-02-12T14:52:28.273 回答
-1

尽管这是一篇旧帖子,但我一直在寻找解决此问题的方法并执行以下操作来解决它。

使用 JQuery,一旦模式窗口打开,我就禁用了不同表单和 div 中的所有输入字段(除了模式表单本身的那些)。

$('#formId :input').prop('disabled',true);

当模态表单关闭时,您可以再次启用输入元素。

在您的页面周围“切换”时不考虑禁用的字段。

于 2013-01-09T19:25:14.257 回答