我有setInterval
运行,检查是否存在具有某个类的元素。如果找到它,则将click事件绑定到该元素并清除间隔。
在此点击事件中,我想再次重新启动相同的setInterval
。这是我无法实现的。
我已尝试过此代码,但它没有重新启动setInterval
外部文件。已经(全球)
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
//Also tried the following but in vain
//clearInterval(interval);
//delete window.interval;
//delete interval;
//interval = null;
interval = setInterval(onInterval, 1000);
});
clearInterval(interval);
}
};
interval = setInterval(onInterval, 1000);
此外,我尝试了以下但它也无法正常工作。它没有约束第一次点击本身我不知道为什么。控制台中没有错误。
$(document).on('click', '.lpInviteChatHrefClose', function(){
// your code here...
});
请帮忙!
提前致谢。
答案 0 :(得分:0)
评论后编辑:
请参阅JsFiddle
我在小提琴中动态添加一个链接以符合要求。我检查了长度是== 1并杀死了间隔。
var interval;
var onInterval;
$(function() {
onInterval = function () {
if ($('.lpInviteChatHrefClose').length===1) {
$(".lpInviteChatHrefClose").click(function () {
//Do something on click
clearInterval(interval);
});
console.log("interval cleared");
clearInterval(interval);
}
console.log("interval runs");
};
interval = setInterval(onInterval, 1000);
})
答案 1 :(得分:0)
您的准则是正确的。
它不起作用的唯一原因是典型的'哦不,我没有使用.on()事件绑定'。
试试这个:
onInterval = function () {
//check if an element with this class exists
if ($('.lpInviteChatHrefClose').length) {
$(document).on('click','.lpInviteChatHrefClose',function () {
outbound_reject_omniture_setting(this);
//This should restart the interval but it doesnt
//Also tried the following but in vain
//clearInterval(interval);
//delete window.interval;
//delete interval;
//interval = null;
interval = setInterval(onInterval, 1000);
});
clearInterval(interval);
}
};
interval = setInterval(onInterval, 1000);
为了将来参考,请使用' .on()'事件绑定。 Proper Explanation to this jQuery practice
答案 2 :(得分:0)
我能够做到这一点。
问题是setInterval
正在重新启动(你可以说是一个观察错误),但它立即被绑定到一个动态创建的早期元素,因此新元素在一段时间后被添加没有受到约束。
另外我忘了提到被调用的方法即outbound_reject_omniture_setting
正在做一些工作然后该元素的父级被隐藏,所以我无法检查如果点击被绑定到同一个元素。
解决方案是遍历所有添加到现在的元素并检查其父元素是否为visible
。如果是,则将click事件绑定到元素并清除间隔。在单击功能中,重新启动间隔。
onInterval = function () {
$('.lpInviteChatHrefClose').each(function (index) {
if ($(this).parent().css('visibility') == 'visible') {
$(this).click(function () {
outbound_reject_omniture_setting(this);
interval = setInterval(onInterval, 1000);
});
clearInterval(interval);
}
})
};
interval = setInterval(onInterval, 1000);
谢谢大家的帮助。