Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在使用的方法内重新启动setInterval_Javascript_Jquery_Html_Restart - Fatal编程技术网

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中。我还想将单击事件附加到该元素。这是我无法实现的,因为间隔没有重新启动。我希望你能理解我的问题。