你如何暂时禁用javascript中的所有事件?我们想让它们禁用,以便某些事件在我们单击某些内容后 700 毫秒后才会运行。
问问题
9292 次
5 回答
11
如果您尝试暂时禁用所有点击,那么在不更改页面或代码的任何其余部分的情况下,一种简单的方法是在整个页面上放置一个绝对定位的透明 div,拦截并停止所有点击的传播事件。然后,使用 setTimeout() 以您想要的任何时间间隔删除该透明 div。
将 blockDiv 放在您的页面 HTML 中,这样它就已经存在了。
在您的 HMTL 中:
<body>
<div id="blockDiv"></div>
... other page HTML here
</body>
然后,在页面中有这个 CSS:
#blockDiv {
position: absolute;
left: 0;
right: 0;
height: 100%;
width: 100%;
z-index: 999;
}
而且,这个javacript:
$("#blockDiv").click(function(e) {
// stop propagation and prevent default by returning false
return false;
});
setTimeout(function() {
$("#blockDiv").remove();
}, 700);
于 2013-01-17T05:36:02.923 回答
1
使用 setTimeout
$('a').click(function( e ){
e.preventDefault();
setTimeout(function(){
// DO SOMETHING AFTER 700ms
},700);
});
于 2013-01-17T05:27:54.050 回答
1
setTimeout
是你想要的。
setTimeout() 方法在指定的毫秒数后调用函数或计算表达式。
它需要两个参数:
1)要调用的函数或代码,
2)执行代码/函数之前等待的毫秒数。
setTimeout(function(){
//do your stuff
},700);
于 2013-01-17T05:28:47.597 回答
1
看看这篇文章,这将展示如何懒惰地聆听快速触发的事件
$.fn.bindDelayEvent = function(eventName, delay, fnc){
$this = $(this);
var timer = undefined;
var delayFnc = function(){
clearTimeout(timer);
var self = this;
var args = arguments;
timer = setTimeout(function(){
fnc.apply(self, args);
}, delay);
}
$this.bind(eventName, delayFnc);
}
$(window).bindDelayEvent("resize", 1000, function () {
alert("click event fires after 1000ms")
});
于 2013-01-17T06:06:03.153 回答
0
禁用页面上的所有事件非常容易。困难的部分是在需要时恢复它们。
document.body.innerHTML = document.body.innerHTML;
这将通过用它的“原始”副本替换 DOM 来有效地删除绑定到 DOM 节点的所有事件。
大多数时候用户甚至不会注意到重绘。
至于在一段时间后恢复它们,您可以尝试在替换 innerHTML 之前保存一份 DOM:
oOldDom = document.cloneNode(1);
并在以后恢复它。
于 2016-02-13T22:03:38.330 回答