5

你如何暂时禁用javascript中的所有事件?我们想让它们禁用,以便某些事件在我们单击某些内容后 700 毫秒后才会运行。

4

5 回答 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 回答