暂时禁用javascript中的所有事件

时间:2013-01-17 05:25:31

标签: javascript jquery

你如何暂时禁用javascript中的所有事件?我们希望禁用它们,以便某些事件在我们点击之后700毫秒之后才会运行。

5 个答案:

答案 0 :(得分:9)

如果您尝试暂时禁用所有点击,那么在不更改页面或代码的任何其余部分的情况下执行此操作的简单方法是在整个页面上放置一个绝对定位的透明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);

答案 1 :(得分:1)

使用setTimeout

$('a').click(function( e ){

   e.preventDefault();

    setTimeout(function(){
        // DO SOMETHING AFTER 700ms
    },700);

});

答案 2 :(得分:1)

setTimeout就是你想要的。

  

setTimeout()方法在指定的毫秒数后调用函数或计算表达式。

它需要两个参数:
 1)调用的函数或代码和
 2)执行代码/函数之前等待的毫秒数。

 setTimeout(function(){
    //do your stuff
 },700);

答案 3 :(得分: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")
    });   

How to listen lazily to rapidly firing events like window resize?

答案 4 :(得分:0)

禁用页面上的所有活动非常简单。困难的部分是在需要时恢复它们。

document.body.innerHTML = document.body.innerHTML;

这将通过将DOM替换为DOM&#34; virgin&#34;副本。

大部分时间用户都不会注意到重绘。

在一段时间后恢复它们,您可以在替换innerHTML之前尝试保存DOM的副本:

oOldDom = document.cloneNode(1);

稍后再恢复。