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

How to delay the onclick response of an element in javascript

本文关键字:元素 onclick 响应 延迟 javascript      更新时间:2023-09-26

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

我可以延迟元素的点击操作吗? 我有一个在 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 视为弹出窗口并停止它。所以我想换个角度来回答这个问题。有没有办法告诉浏览器在进行点击之前等待? 在该元素的 .click 中,我有执行其他功能的代码。

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

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

快速而肮脏的方法是创建一个新函数来包装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 秒结束后会发生什么。

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

不,没有可行的方法可以在不挂起浏览器一段时间的情况下延迟当前正在运行的 javascript 线程的执行。

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

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

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