Javascript 重新启动jquery';s setInterval而不重新初始化它
正如我的标题所示,我想重新启动jquery的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标记(使用相同的类名),但如果未单击现有的可见
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);