如何停止/覆盖Jquery TimeOut函数?

时间:2010-04-05 13:37:07

标签: javascript jquery ajax timeout notifications

我有一个小的jquery片段,它会在屏幕顶部显示通知消息,以响应页面上的用户操作。通知通常在Ajax操作之后显示,其中包含动态内容。

例如:

$("#mini-txt").html("Thank you!");
$("#mini").fadeIn("fast");
setTimeout(function() {$("#mini").animate({height: "hide", opacity: "hide"}, "medium");}, 3000);

通知效果很好,除非用户快速连续执行两个或更多操作,在这种情况下,TimeOut函数会自行混淆,第二条消息似乎在前3000毫秒内。

如果执行了新操作,是否有办法“杀死”上一个通知。我对动作/选择器没有问题,只是TimeOut函数....要么停止它,要么以某种方式覆盖它。或者也许有更好的选择让消息在屏幕上停留几秒钟然后消失?

谢谢。

4 个答案:

答案 0 :(得分:60)

首先,存储setTimeout函数的返回值:

// Set the timeout
var timeout = setTimeout(function()
    {
        // Your function here
    }, 2000);

然后,当您准备好终止超时时......您只需使用之前调用clearTimeout的存储值来调用setTimeout

// Then clearn the timeout
clearTimeout(timeout);

答案 1 :(得分:6)

您可以使用 .stop()

  

停止当前正在运行的动画   在匹配的元素上。

答案 2 :(得分:6)

jQuery 1.4有一个内置的方法来处理动画的延迟,你可以这样做:

$("#mini-txt").html("Thank you!");
$("#mini").fadeIn("fast").delay(3000).animate({height: "hide", opacity: "hide"}, "medium");

然后当你想要清理动画队列时,你可以这样做:

$("#mini").stop(true);

答案 3 :(得分:0)

这将在延迟500ms的函数运行后清除超时

class talk{

public:

    int a=5;
    virtual void moveMouth(){
        cout <<"blah blah blah"<<endl;
    }
};