Javascript 在使用的方法内重新启动setInterval
我运行了一个Javascript 在使用的方法内重新启动setInterval,javascript,jquery,html,restart,Javascript,Jquery,Html,Restart,我运行了一个setInterval,它检查某个类的元素是否存在。如果它找到它,那么它会将click事件绑定到该元素并清除间隔 var interval; var onInterval; $(function() { onInterval = function () { if ($('.lpInviteChatHrefClose').length===1) { $(".lpInviteChatHrefClose").click(function (
setInterval
,它检查某个类的元素是否存在。如果它找到它,那么它会将click事件绑定到该元素并清除间隔
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);
})
在此单击事件中,我想再次重新启动相同的setInterval
。这是我无法实现的。
我尝试过此代码,但它没有重新启动setInterval
外部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...
});
请帮忙
提前感谢。评论后编辑:
请看
我在fiddle中动态添加了一个链接以匹配需求。我检查了长度==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);
})
你的代码是正确的
它不起作用的唯一原因是典型的“哦,不,我没有使用.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()”事件绑定。
我能够做到这一点 问题是,
setInterval
正在重新启动(可以说是一个观察错误),但它立即绑定到一个早期的动态创建的元素,因此在一定时间后添加的新元素没有绑定
另外,我忘了提到被调用的方法,即出站\拒绝\全真\设置
正在做一些工作,然后该元素的父元素被隐藏,因此我无法检查单击是否绑定到同一个元素
解决方案是循环遍历到目前为止添加的所有元素,并检查其父元素是否可见。如果是,则将单击事件绑定到元素并清除间隔。在单击功能中,重新启动间隔
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);
谢谢大家的帮助。您能解释一下“第一次点击时它没有绑定自己,我不知道为什么”?我在代码中尝试了alert,但它没有显示消息。同一页面上的其他jQuery代码是否正常工作?是的。事实上,setinterval代码第一次也运行良好。只是它不适用于动态添加到页面的后续元素。并且上述两个代码位于同一页上。为此,必须使用setInterval。您的第二种方法是更好的解决方案。你能做一个演示吗?我正在创建trigger in interval函数,因为当页面完全加载时,元素会在任何时候动态添加到页面中。将此视为客户支持对客户的请求。jquery在document.ready上找不到此元素。如果删除长度条件,则函数将被调用多次,因为一旦元素出现在页面上,每秒将有许多匿名函数附加到click事件。我只想在单击元素时调用该函数一次。只是想了解您的目的:间隔正在运行document.load,然后@time n将带有类的按钮添加到DOM中,下一个间隔检测到按钮,触发单击并停止间隔?对吗?绝对正确。但是,可以将具有该类的新元素添加到同一dom中。我还想将单击事件附加到该元素。这是我无法实现的,因为间隔没有重新启动。我希望你能理解我的问题。