在其使用的方法内重新启动setInterval

时间:2014-05-07 05:44:03

标签: javascript jquery html restart

我有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...
});

请帮忙!

提前致谢。

3 个答案:

答案 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);

谢谢大家的帮助。