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);