首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript,是否允许用户只关注某些页面元素?

JavaScript,是否允许用户只关注某些页面元素?
EN

Stack Overflow用户
提问于 2011-08-13 06:22:37
回答 3查看 1.2K关注 0票数 3

在jQuery-UI-Dialog中,我可以在我的网页上显示一个“modal”对话框,这样用户就必须单击对话框中的一个选项才能继续。

我一直在编写自己的对话框代码,但是jQuery-UI-Dialog做了一些我还不知道该怎么做的事情。

我可以在对话框后面显示一个“掩码”元素,以防止用户单击页面上的元素,但用户仍然可以使用Tab键选择对话框后面的元素。

jQuery-UI-Dialog似乎以某种方式将键盘输入捕获到对话框中,即使按下tab键也是如此。这是非常整洁的,但我要补充说,它可能会被滥用。

我需要访问DOM的哪个方面才能获得此功能?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-17 06:11:27

我很想接受William Niu的回答,但有一个缺陷使它无法在我的web应用程序中工作。如果对话框中的第一个或最后一个元素是单选按钮,则此代码在IE中不起作用。浏览器将切换到单选按钮组一次。

如果选定的单选按钮是在用户按tabs键切换到单选按钮组时浏览器突出显示的单选按钮,则此代码将起作用。但是,选定的单选按钮不是在用户按tabs键切换到单选按钮组时浏览器突出显示的单选按钮,则焦点将从对话框中丢失。

下面是我写的一些解决这个问题的代码:

代码语言:javascript
复制
function _bindTabKeyForDialog(dialogId) {
    var tabbable = $('#' + dialogId).find(':tabbable');
    var firstElement = $(tabbable).filter(':first');
    var lastElement = $(tabbable).filter(':last');

    var firstGroup = (firstElement[0].type !== 'radio') ?
        firstElement :
        tabbable.filter("[name='" + firstElement[0].name + "']");
    var lastGroup = (lastElement[0].type !== 'radio') ?
        lastElement :
        tabbable.filter("[name='" + lastElement[0].name + "']");

    $(document).unbind('keydown.' + dialogId);
    $(document).bind('keydown.' + dialogId, function (e) {
        if (e.keyCode == 9) {
            if ($(e.target).is(lastGroup) && !e.shiftKey) {
                firstGroup.first().focus();
                e.preventDefault();
            }
            else if ($(e.target).is(firstGroup) && e.shiftKey) {
                lastGroup.first().focus();
                e.preventDefault();
            }
        }
    });
} // end _bindTabKeyForDialog

如您所见,我将William的firstlast变量更改为元素组。如果对话框中的第一个或最后一个可选项卡元素是单选按钮,则它将包含所有同名的单选按钮。

否则,此代码的功能与William的代码相同。

票数 0
EN

Stack Overflow用户

发布于 2011-08-14 08:12:12

在jQuery UI中,它们捕获选项卡,而忽略其他键,并将选项卡序列限制为对话框上的可选项卡元素。查看original source of code of jQuery UI v1.8.5中的代码片段

代码语言:javascript
复制
        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;
            }
        });

keypress.ui-dialog是一个namespaced event。它使开发人员能够更容易地识别事件,例如用于触发和删除。但是在函数方面,你可以把它当作一个普通的keypress事件。

票数 1
EN

Stack Overflow用户

发布于 2011-08-13 06:25:24

将正文溢出设置为隐藏

代码语言:javascript
复制
$('body').css({'overflow':'hidden'});

jQuery screen grey out box demo

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7046941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档