【问题标题】:Queuing and stop propagating a click event to inside a div in Javascript在Javascript中排队并停止将点击事件传播到div内部
【发布时间】:2009-05-29 16:57:23
【问题描述】:

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

所以,我有一个<div>,其中包含一堆元素,我希望在 3 秒内无法点击(计时器或其他事件),但以某种方式捕获队列中的事件,然后在一段时间(或我选择的某些事件)过去/执行后解雇他们?

我认为这是一个类似于放置模式对话框的问题,然后在它下面没有任何可点击的东西。我这样想对吗?

【问题讨论】:

    标签: javascript html queue


    【解决方案1】:

    一种可能性是让 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;
        }
    })();
    

    【讨论】:

      【解决方案2】:

      给 div 一个 onclick 函数,它会在前 3 秒开始,因为它只是保持一系列调用及其事件...然后在 3000 毫秒计时器完成后,运行一个更改 div 的 onclick 的函数,允许要编辑的东西,并运行事件数组。

      【讨论】:

        【解决方案3】:

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

        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*/
        }
        

        希望对你有帮助

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-28
          • 2015-11-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多