Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 对setTimeout事件使用live()_Jquery_Settimeout_Live - Fatal编程技术网

Jquery 对setTimeout事件使用live()

Jquery 对setTimeout事件使用live(),jquery,settimeout,live,Jquery,Settimeout,Live,我有这两段代码 $(".hideMessage").live("click", function(event) { $('.messageSuccess').hide("slow"); return false; }); 及 基本上,当单击.hideMessage时,第一段隐藏.messageSuccess,并使用live()因此,如果我有任何.messageSuccess之后通过AJAX生成,我仍然可以访问它们 如果用户在10秒内未单击.hideMessage链接,则第二段将隐藏

我有这两段代码

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

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


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

您需要知道何时添加了新的
.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);

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

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


另一方面,如果使用jQuery 1.7+将
.live
更新为
.On

则应使用
On()
事件。不太清楚您想要的是什么,但是如果您正在执行一个ajax请求,并且希望在请求完成后隐藏元素,那么您可以使用ajax请求的success或complete回调吗?如果没有看到ajax请求的代码,很难说清楚。@FrançoisWahl在下面看到我的评论是的,这就是我现在正在做的。。。但是我不想每次都在响应中嵌入setTimeout代码,我只想做一次——就像我在第一行使用live()@user1735943时所做的那样:我认为您可以将代码与全局ajax成功联系起来。请查看事件处理程序,特别是事件处理程序。也许你可以解决这些问题。@N Rohler我的问题是,如果.messageSuccess是在页面加载后生成的(通过AJAX调用),如果我不使用live()绑定它,我就无法控制它。第一行我做了,但第二行我不知道怎么做。我不确定你是否读过我的答案;)
.messageSuccess
是如何产生的?它是作为对$.get(ajax)调用的响应生成的。我对php文件进行$.get(ajax)调用=>运行查询=>在页面中生成.messageSuccess(无需重新加载)。然后需要在
$.get()
响应处理程序中设置超时。这将确保它被创建后10000秒隐藏。是的,这就是我现在正在做的。。。但是我不想每次都在响应中嵌入setTimeout代码,我只想做一次,就像我使用live()处理第一行一样。
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);