在准备就绪之前防止任何点击

Prevent any clicks before ready

本文关键字:任何点 准备就绪      更新时间:2023-09-26

我需要在设置标志之前禁用网页上的任何活动。让我们忽略该标志,并说我只想永远禁用对页面的任何点击。我以为它会像以下一样简单:

$(window).click(function(e) {
    e.preventDefault();
});

鉴于上述情况,我仍然可以很好地单击链接。

如何使所有点击都保持惰性?

您无法像这样继续,因为单击首先被链接捕获,然后再转发到封闭元素。

最简单的解决方案是在窗口上放置一个不可见的div:

#mask {
    position: fixed;
    left:0; right:0; top:0; bottom:0;
}

正如 Connor 所指出的,您可能需要设置一个z-index(实际上这取决于页面的其余部分(。

示范

除了dystroy回答之外,您还可以做的其他事情是为您的身体设置一个类no-click和以下css

body.no-click * {
    pointer-events: none;
}

要启用点击,只需从您的身体中删除班级no-click

如果您需要IE 11<支持,请忘记pointer-events。兼容性>

演示

这就是我要做的:

var done = false;
$('body').on('click', '*', function(e) {
    if (!done) e.preventDefault();
}).on('load', function() {
    done = true;
});

如果您需要完全停止页面上的点击,您可以取消绑定所有点击事件,如下所示:

https://stackoverflow.com/a/13056681/303552

function RecursiveUnbind($jElement) {
    // remove this element's and all of its children's click events
    $jElement.unbind();
    $jElement.removeAttr('onclick');
    $jElement.children().each(function () {
        RecursiveUnbind($(this));
    });
}

你可以像这样调用该函数:

RecursiveUnbind($(window));

只需返回 false

$("*").on("click",function(e) {
    e.preventDefault();
return false
});

$("*").on("click",function(e) {
    e.preventDefault();
e.stopPropagation()
});

这两个都停止了对其父元素的传播,因此阻止了默认值

我认为这就是你要找的。使用命名空间,以便不会撤消任何其他点击事件。

注意:执行阻止的单击必须高于任何其他脚本标记。

示例:http://jsfiddle.net/qNuRA/2/

$('*').on('click.startup', function (e) {
    e.preventDefault();
    e.stopPropagation();
    e.stopImmediatePropagation();
});
$(document).ready(function () {
    $('*').off('click.startup');
});