我可以延迟元素的onclick动作吗?我有一个在onclick事件中调用函数的元素。如何延迟对该功能的调用?我想告诉浏览器在执行onclick操作之前停止两秒钟。
元素看起来像这样。
<div id="id01" class="channel" onclick="load_window('http://www.ewtn.com')"><a>EWTN.com</a></div><br/>EWTN television network</div>
如果我将setTimeout放在load_window函数中,浏览器会将window.open视为弹出窗口并将其停止。所以我想以不同的方式提出这个问题。有没有办法告诉浏览器在执行onclick之前等待?在该元素的.click中,我有执行其他功能的代码。
$('.channel').click(function() {
$(this).addClass("selected");
show_layer();
setInterval("refresh_caption()",300000);
});
我希望延迟调用load_window(),同时仍然将浏览器视为用户操作。
答案 0 :(得分:3)
快速而肮脏的方法是创建一个包含load_window
调用超时的新函数,并将该新函数设置为onclick
值。
function channel_click(){
// anon wrapper function, 2 second delay
setTimeout( function () {
load_window('http://www.ewtn.com');
} , 2000 );
}
然后
<div id="id01" class="channel" onclick="channel_click()"><a>EWTN.com</a></div><br/>EWTN television network</div>
不知道你的load_window
函数究竟在做什么,所以我不能说2秒后会发生什么。
同样,这是您提供的示例所特有的。如果您需要更通用的方法,则必须提供更多信息。
答案 1 :(得分:0)
不,没有可行的方法来延迟执行当前运行的javascript线程而不会在这段时间内挂起浏览器。
你可以循环一直到2秒钟,然后做你的弹出式事情,但这将是一个糟糕的用户体验,有些浏览器甚至可能因为它没有响应而中止你的脚本。我根本不推荐这个。这是一个糟糕的设计。
以后执行某些代码通常是通过setTimeout()
完成的,但是你已经说过你不想出于弹出的原因使用它。
如果你想解释你真正试图解决的问题,也许我们可以提供其他方法来解决问题。