如何在javascript中延迟元素的onclick响应

时间:2012-05-02 19:47:45

标签: javascript browser popup window.open

  

可能重复:
  How to tell browser to stay on current window

我可以延迟元素的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(),同时仍然将浏览器视为用户操作。

2 个答案:

答案 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()完成的,但是你已经说过你不想出于弹出的原因使用它。

如果你想解释你真正试图解决的问题,也许我们可以提供其他方法来解决问题。