3

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

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

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

如何渲染所有点击惰性?

4

6 回答 6

13

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

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

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

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

示范

于 2013-10-10T17:14:43.837 回答
4

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

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

no-click要启用点击,只需从您的正文中删除该类

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

DEMO

于 2013-10-10T17:40:43.700 回答
2

这就是我要做的:

var done = false;
$('body').on('click', '*', function(e) {
    if (!done) e.preventDefault();
}).on('load', function() {
    done = true;
});
于 2013-10-10T17:15:49.350 回答
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));
于 2013-10-10T17:18:32.030 回答
-1

只返回 false

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

或者

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

这两个都停止传播到它们的父元素,因此默认值被阻止

于 2013-10-10T17:14:43.343 回答
-1

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

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

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

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

$(document).ready(function () {
    $('*').off('click.startup');
});
于 2013-10-10T17:21:25.310 回答