正如我的标题所示,我想重新启动jquery的setInterval而不重新初始化它。
我的方案是考虑一个完全加载的页面。在此页面上,div
会在页面完全加载后随时动态添加。我没有从我的代码中添加此div
,所以我对此没有任何控制权。这个div
有一个类lpInviteChatHrefClose
。这是固定的,即div
将始终具有此类。当用户点击此div时,会执行一些javascript函数,并隐藏此div
。此外,还可能会添加多个div
代码(使用相同的类名称),但如果未点击现有的可见div
代码,则不会添加新的div
。
现在,我想要实现的是我想点击这个div
来调用javascript函数。现在,由于动态添加了此div
,因此无法编写以下内容,因为jquery将无法在div
上找到document.ready
$('.lpInviteChatHrefClose').click(function(){...});
所以我做的是创建了一个setInterval
来检查是否存在div
,如果是,则绑定click事件。第一次添加动态div
时,我能够完成这项工作。
当第二次将此动态div
添加到html时,我的问题就出现了。这里我再次需要处理新动态添加的div
的点击事件。
到目前为止我所做的工作如下
外部文件。已经(全球)
var interval;
var onInterval;
在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);
我会取消此检查if ($('.lpInviteChatHrefClose').length)
,但只要动态setInterval
出现,div
每1秒后会附加一个功能。我不想要这个。我希望我的javascript函数只能被调用一次。
clearInterval(interval);
将停止/暂停间隔。但我不知道如何重新启动它。
请帮忙!
很抱歉这么长的说明。提前谢谢!
答案 0 :(得分:0)
您需要使用委托事件处理程序将事件附加到DOMready被触发后创建的元素。忘记与setTimeout
或setInterval
。
$(document).on('click', '.lpInviteChatHrefClose', function(){
// your code here...
});
答案 1 :(得分:0)
您不必将setInterval
用于动态元素。使用事件委托
$(document).on('click','.lpInviteChatHrefClose',function(){...});
答案 2 :(得分:0)
我能够做到这一点。
问题是setInterval
正在重新启动(你可以说是一个观察错误),但它立即被绑定到一个动态创建的早期元素,因此新元素在一段时间后被添加没有受到约束。
另外正如我提到的那样被调用的方法即outbound_reject_omniture_setting
正在做一些工作然后元素被隐藏,所以我无法检查点击是否被绑定到同一个元素。
解决方案是循环遍历迄今为止动态添加的所有元素,并检查其中任何一个元素是visible
。如果是,则将click事件绑定到元素并清除间隔。在单击功能中,重新启动间隔。
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);
谢谢大家的帮助。