[英]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.