繁体   English   中英

排队并停止将click事件传播到Javascript中的div中

[英]Queuing and stop propagating a click event to inside a div in Javascript

我正在尝试实现“等待3秒钟以执行此操作” <div>

因此,我有一个<div> ,其中包含一堆元素,我希望在3秒钟内无法单击(一个计时器或其他事件),但是以某种方式捕获了队列中的事件,然后将其触发时间段(或我选择的某个事件)已经过去/执行了吗?

我认为这是一种问题,就像建立一个模式对话框,然后在其下方没有任何可单击的对话框。 我是这样想的吗?

一种可能性是让DIV的点击处理程序在事件冒泡时响应对其子元素的点击。 该处理程序将执行排队,直到延迟过去。 这是一个粗糙的示例(为方便起见,使用jQuery事件处理):

(function() {
    var isReady = false, queue = [];

    setTimeout(function() {
        isReady = true;
        processQueue()
    }, 3000);

    $("#mainDiv").click(function(ev) {
        if (isReady) {
            //code to handle the click based on which child was clicked (ev.srcElement)
        } else {
            queue.push(ev.srcElement);
        }
    });

    function processQueue() {
        var i, elem;
        for (i = 0; elem = queue[i]; i++) {
            $(elem).click(); //re-trigger the click event
        }
        queue.length = 0;
    }
})();

给div一个onclick函数,该函数在开始的3秒钟内就开始,只是保留一系列带有事件的调用...然后在3000毫秒计时器完成后,运行一个可更改div的onclick的函数,编辑并运行事件数组。

我发现另一个有用的功能是函数。

setTimeout("alert('hello')",1250);

因此,围绕所有元素onclick方法和第二种方法的东西,该方法将在需要时存储该调用。

<div onclick=registerClick("normallyDoThis()")></div>

然后,您可以在时间开始时设置一个计时器以更改Div并执行所有命令。 可能使用eval命令?

setTimeout("changeTheDiv()", 3000);

function changeTheDiv()
{
/*eval() all the items in a list of onclicks youve been storing up */
/*Then go through and parse out the register() from all the onclick methods*/
}

我希望这有帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM