在准备就绪之前防止任何点击
Prevent any clicks before ready
我需要在设置标志之前禁用网页上的任何活动。让我们忽略该标志,并说我只想永远禁用对页面的任何点击。我以为它会像以下一样简单:
$(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');
});
相关文章:
- 当组件准备就绪时,如何在Polymer中动态注册新属性
- IIFE jquery已准备就绪
- 准备就绪时的随机背景
- Javascript/Css导航未显示在jquery文档上,仅在ie中准备就绪
- 在页面上加载高级jQuery版本准备就绪
- 获取在谷歌地图上点击的任何点的坐标
- 修改 DOM 后如何确保 DOM 再次准备就绪
- 可以't将属性src设置为null,即使DOM已准备就绪
- 当文档准备就绪时,将数据从一个文本框复制到另一个
- 电话间隙设备准备就绪,5秒钟后未启动
- AngularJS文档准备就绪,无法正常工作
- 只有在文档内部的警报准备就绪后,触发器才能工作
- 确定对象何时准备就绪.我应该使用事件吗
- SVG正在等待文档在javascript中准备就绪
- 在 DOM 准备就绪之前附加类
- 如何检查提供程序以查看 HTTP 数据是否已准备就绪
- 科尔多瓦在从 3.3.0 更新到 3.6.4 后未启动设备准备就绪
- 当数据准备就绪时,React-Rails gem 调用组件
- 在页面加载之前捕获点击事件,并在 DOM 准备就绪后触发
- 在准备就绪之前防止任何点击