在setTimeout事件上使用live()

时间:2013-01-22 00:59:03

标签: jquery settimeout live

所以我有这两段代码。

$(".hideMessage").live("click", function(event) {
   $('.messageSuccess').hide("slow");
   return false;
});

setTimeout(function(){
   $(".messageSuccess").hide("slow") 
}, 10000);

基本上,当点击.messageSuccess时,第一个段会隐藏.hideMessage,并使用live(),因此如果我之后通过AJAX生成了.messageSuccess,我仍然可以访问它们。

如果用户未在10秒范围内点击.messageSuccess链接,则第二个段会隐藏.hideMessage。问题是,如何在第二段中使用live(),以便我可以控制生成的AJAX .messageSuccess

2 个答案:

答案 0 :(得分:0)

每当添加新的.messageSuccess元素时,您需要知道在创建时设置超时。最好的选择是修改脚本以在添加新元素时设置超时。但是,如果您无法执行此操作(例如,您无法控制的第三方脚本),则需要设置轮询间隔以检查新元素是否存在。

例如:

setInterval(function(){
    $('div.messageSuccess').each(function(){
        var $this = $(this);
        if ($this.data('hideScheduled'))
            return;
        $this.data('hideScheduled', true);
        setTimeout(function(toHide){ toHide.hide('slow'); }, 10000, $this);
    });
}, 2000);

此脚本将在它们出现后10-12秒自动隐藏任何新的div.messageSuccess元素。

答案 1 :(得分:0)

您不需要,因为$(".messageSuccess")会选择DOM中当前所有.messageSuccess元素,无论它们是否是由AJAX添加的。

如果你使用的是jQuery 1.7+更新.live.on,那就不相关了。