准备好之前防止任何点击

时间:2013-10-10 17:12:26

标签: javascript jquery events

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

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

鉴于上述情况,我仍然可以点击链接。

如何渲染所有点击惰性?

6 个答案:

答案 0 :(得分:13)

你不能这样做,因为点击首先被链接捕获,然后转发到封闭元素。

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

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

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

Demonstration

答案 1 :(得分:3)

除了破坏回答你可以做的其他事情是为你的身体设置一个班级no-click和以下的CSS

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

要启用点击,只需从您的身体中移除课程no-click

如果您需要支持< IE 11,忘了pointer-eventsCompatibility

DEMO

答案 2 :(得分:2)

这就是我要做的事情:

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

答案 3 :(得分:0)

如果您需要完全停止页面上的点击,您可以解除所有点击事件的绑定,例如在此答案中:

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));

答案 4 :(得分:-1)

只返回false

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

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

这两个都会阻止传播到其父元素,因此默认会被阻止

答案 5 :(得分:-1)

我认为这就是你要找的东西。使用名称空间,以便您不撤消任何其他单击事件。

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

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

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

$(document).ready(function () {
    $('*').off('click.startup');
});