0

这是我的代码

HTML 代码

<ul>
    <li>One</li>
    <li>Two</li>
    <li>Three</li>
    <li>Four</li>
</ul>

以下是一段Javascript代码

//The below line is outside of document ready
var interval;

//The below code is wraped in  document ready
$("input").live("click", function(){

 var length = $('li').length, start = 1;
    alert(length+' : '+start);
    interval = setInterval(function() {
                    if (length > 0 && start <= length) {
                        alert('IF section');
                        $('li:nth-child('+start+')').
                           removeClass('hidden').addClass('visible');
                        start++;
                    } else {
                        alert('Else section with before clearInterval called');
                        clearInterval(interval);
                        alert('Else section with after clearInterval called');

                    }
}, 3000);


});

在方法执行后,这里ELSE的部分被重复调用。clearInterval一件有趣的事情是alert beforeclearInterval语句被重复调用,而alert afterclearInterval没有在setInterval方法中调用。你可以在fiddle中找到一个例子。在 Fiddlevar interval里面是 DomReady。它应该在 DomReady 之外。我不知道如何把它放在 DomReady 之外。

为什么会发生这种情况?

如何纠正这个?

4

1 回答 1

1

检查这个演示:http: //jsfiddle.net/QZxtL/1/

您需要做的就是将您的clearInterval呼叫更改为clearInterval(interval);

注意:我将间隔更改为 1000 毫秒以使测试更容易。:-)

于 2012-11-03T09:51:38.147 回答