在设置标志之前,我需要禁用网页上的任何活动。让我们忽略该标志并说我只想永远禁用对该页面的任何点击。我认为这很简单:
$(window).click(function(e) {
e.preventDefault();
});
鉴于上述情况,我仍然可以点击链接就好了。
如何渲染所有点击惰性?
在设置标志之前,我需要禁用网页上的任何活动。让我们忽略该标志并说我只想永远禁用对该页面的任何点击。我认为这很简单:
$(window).click(function(e) {
e.preventDefault();
});
鉴于上述情况,我仍然可以点击链接就好了。
如何渲染所有点击惰性?
您不能这样继续,因为点击首先被链接捕获,然后才被转发到封闭元素。
最简单的解决方案是在窗口上放置一个不可见的 div:
#mask {
position: fixed;
left:0; right:0; top:0; bottom:0;
}
正如康纳所指出的,您可能需要设置 a z-index
(实际上它取决于页面的其余部分)。
这就是我要做的:
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');
});