1

可能重复:
如何告诉浏览器停留在当前窗口

我可以延迟元素的 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>

如果我在 load_window 函数中放置一个 setTimeout,浏览器会将 window.open 视为弹出窗口并停止它。所以我想以不同的方式提出这个问题。有没有办法告诉浏览器在执行 onclick 之前等待?在该元素的 .click 中,我有执行其他功能的代码。

    $('.channel').click(function() { 
        $(this).addClass("selected");
        show_layer();
        setInterval("refresh_caption()",300000);
    }); 

我希望延迟对 load_window() 的调用,同时仍让浏览器将该操作视为用户操作。

4

2 回答 2

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 秒后会发生什么。

同样,这特定于您提供的示例。如果您需要更通用的方法,则必须提供更多信息。

于 2012-05-02T19:58:41.260 回答
0

不,没有可行的方法来延迟当前正在运行的 javascript 线程的执行而不在这段时间内挂起浏览器。

您可以在一个紧密的循环中循环直到 2 秒过去,然后执行您的弹出操作,但这将是一种可怕的用户体验,并且某些浏览器甚至可能由于其无响应性而中止您的脚本。我根本不推荐这个。这是一个糟糕的设计。

稍后执行一些代码通常是通过 完成的setTimeout(),但是您已经说过出于弹出原因不想使用它。

如果您愿意解释您真正想要解决的问题,也许我们可以提供一些其他方法来解决问题。

于 2012-05-02T19:57:38.113 回答