Javascript 重新启动jquery';s setInterval而不重新初始化它

Javascript 重新启动jquery';s setInterval而不重新初始化它,javascript,jquery,html,setinterval,restart,Javascript,Jquery,Html,Setinterval,Restart,正如我的标题所示,我想重新启动jquery的setInterval,而不重新初始化它 我的方案是考虑一个完全加载的页面。在这个页面上,一个div会在页面完全加载后的任何时候被动态随机添加。我不是从我的代码隐藏中添加这个div,所以我无法控制它。这个div有一个类,即lpInviteChatHrefClose。这是固定的,即div将始终具有此类。当用户单击这个div时,会执行一些javascript函数,而这个div会被隐藏。此外,可能会添加多个div标记(使用相同的类名),但如果未单击现有的可见

正如我的标题所示,我想重新启动jquery的setInterval,而不重新初始化它

我的方案是考虑一个完全加载的页面。在这个页面上,一个
div
会在页面完全加载后的任何时候被动态随机添加。我不是从我的代码隐藏中添加这个
div
,所以我无法控制它。这个
div
有一个类,即
lpInviteChatHrefClose
。这是固定的,即
div
将始终具有此类。当用户单击这个div时,会执行一些javascript函数,而这个
div
会被隐藏。此外,可能会添加多个
div
标记(使用相同的类名),但如果未单击现有的可见
div
标记,则不会添加新的
div

现在,我想要实现的是,我想要在点击这个
div
时调用一个javascript函数。现在,由于这个
div
是动态添加的,我无法编写以下内容,因为jquery将无法在
文档中找到
div
。ready

$('.lpInviteChatHrefClose').click(function(){...});
因此,我所做的是创建了一个
setInterval
,它检查是否存在这样的
div
,如果是,则绑定click事件。当第一次添加动态
div
时,我就能够实现这一点

当第二次将这个动态的
div
添加到html中时,我的问题就出现了。这里我需要再次处理新动态添加的
div
的单击事件

到目前为止,我所做的工作如下

外部document.ready(全局)

内部文档。准备就绪

onInterval = function () {
    //check if an element with this class exists
    if ($('.lpInviteChatHrefClose').length) {
        $(".lpInviteChatHrefClose").click(function () {
            outbound_reject_omniture_setting(this);
            //This should restart the interval but it doesnt
            interval = setInterval(onInterval, 1000);
        });
        clearInterval(interval);
    }
};

interval = setInterval(onInterval, 1000);
如果($('.lpInviteChatHrefClose').length)的话,我会取消这个检查
if($('.lpInviteChatHrefClose').length)
,但是
setInterval
会在动态
div
出现后每1秒附加一个函数。我不要这个。我希望我的javascript函数只被调用一次

清除间隔(间隔)将停止/暂停间隔。但我不知道如何重新启动它。

请帮忙


对不起,描述得太长了。提前谢谢

您需要使用委托事件处理程序将事件附加到触发DOMready后创建的元素。忘记与
setTimeout
setInterval
有关的任何事情

$(document).on('click', '.lpInviteChatHrefClose', function(){
    // your code here...
});

动态元素不必使用
setInterval
。为此使用事件委派

$(document).on('click','.lpInviteChatHrefClose',function(){...});

我能够做到这一点

问题是,
setInterval
正在重新启动(可以说是一个观察错误),但它立即绑定到一个早期的动态创建的元素,因此在一定时间后添加的新元素没有绑定

另外,正如我所提到的,调用的方法,即
outbound\u reject\u omniture\u setting
正在做一些工作,然后元素被隐藏,因此我无法检查单击是否绑定到同一元素

解决方案是动态循环所有添加到现在的元素,并检查其中是否有一个元素是可见的。如果是,则将单击事件绑定到元素并清除间隔。在单击功能中,重新启动间隔

onInterval = function () {
    $('.lpInviteChatHrefClose').each(function (index) {
        if ($(this).css('visibility') == 'visible') {
            $(this).click(function () {
                outbound_reject_omniture_setting(this);
                interval = setInterval(onInterval, 1000);
            });
            clearInterval(interval);
        }

    })
};

interval = setInterval(onInterval, 1000);

谢谢大家的帮助。

setInterval不是jQuery。。纯洁Javascript@enapupe; 谢谢。我已经试过了,但在我的场景中不起作用。我不知道为什么。它甚至不是第一次打电话。在此之后,我只需使用setinterval。我需要在document.ready内部还是外部编写此代码?您不必将此代码放在document.ready中。此代码肯定适用于每个元素,无论它们是否动态创建。我已经尝试过此方法,但在我的场景中不起作用。我不知道为什么。它甚至不是第一次打电话。在此之后,我只需使用setinterval。我需要把这个文件写在里面吗?准备好了还是在外面?不,我没有。如何检查?你能指引我吗?
onInterval = function () {
    $('.lpInviteChatHrefClose').each(function (index) {
        if ($(this).css('visibility') == 'visible') {
            $(this).click(function () {
                outbound_reject_omniture_setting(this);
                interval = setInterval(onInterval, 1000);
            });
            clearInterval(interval);
        }

    })
};

interval = setInterval(onInterval, 1000);