-1

所以我有这两段代码。

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

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

基本上第一段.messageSuccess.hideMessage被点击时隐藏,并且使用live()所以如果我.messageSuccess之后通过 AJAX 生成任何内容,我仍然可以到达它们。

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

4

2 回答 2

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

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

于 2013-01-22T01:01:27.357 回答
0

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

在不相关的说明中,如果您使用 jQuery 1.7+ 更新.live.on.

于 2013-01-22T01:02:30.727 回答