jquery – 一个setInterval函数可以自动停止吗?

前端之家收集整理的这篇文章主要介绍了jquery – 一个setInterval函数可以自动停止吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个 jsFiddle的例子从工作.
$().ready(function() {
    $('.test').each(function() {
        $this = $(this);
        $this.data('Worker',function() {
            $('#stop').html((parseInt($('#stop').html()) + 1))
        })
        setInterval($this.data('Worker'),100);
    });

    $('#stop').click(function() {
        // I want the worker function to stop being triggered here
        $('.test').remove();
    });
});

我想做的是将一个worker函数附加到DOM中的元素,以便当元素被删除时,worker函数停止.

有可能吗?

解决方法

干得好:
var stopBtn = $( '#stop' );

$( '.test' ).each(function ( i,elem ) {
    var tid = setInterval(function () {
        if ( elem.parentNode ) {
            stopBtn.html(function ( i,num ) { return parseInt(num,10) + 1; });
        } else {
            clearInterval( tid );
        }
    },1000);
});

stopBtn.click(function () {
    $( '.test' ).remove();
});

说明:

首先我们需要一个闭包 – 间隔函数需要知道哪个test-DIV是它的“所有者”,ergo,我们需要将DIV的引用传递给interval函数.在我的代码中,该引用存储在elem变量中,由于关闭,它在interval函数内部可用.因此,间隔函数检查其“所有者”DIV是否仍然附加到DOM(通过检查其父节点).如果是,停止按钮增加.如果不是,则间隔被清除.但是,为了能够清除间隔,我们需要其定时器ID.我们有这个ID,因为我们将它存储在“tid”变量中(setInterval调用返回定时器ID).

现场演示:http://jsfiddle.net/simevidas/ZjY7k/15/

猜你在找的jQuery相关文章