为什么clearInterval()不起作用?

时间:2012-03-15 01:33:13

标签: javascript jquery clearinterval

我是JavaScript的新手,我遇到了这个脚本的问题。 它是网页游戏的一部分,并且脚本假设刷新页面直到玩家赢或输。 由于某种原因,它不会停止刷新,我放置一个警报功能来检查功能是否有效,我收到警报,但它仍然继续刷新页面。 我做错了什么?

var t;

$(document).ready(function () {
    intervals();
});
function intervals() {
    t = self.setInterval('refreshData()', 10000);
}
function youWin() {
    var f = $('#status:contains("YOU ARE THE WINNER!")');
    if (f.length > 0) {
        alert("YOU ARE THE WINNER!");
        t = clearInterval(t);
    }
}
function youlose() {
    var f = $('#status:contains("You lost!")');
    if (f.length > 0) {
        alert("You lost!");
        t = clearInterval(t);
    }
}
function refreshData() {
    $('#ajaxGame').load('RefreshCurrentPlayerServlet #ajaxGame');
    youWin();
    youlose();
}

1 个答案:

答案 0 :(得分:4)

您需要修改self的引用并修正.load()来电。

.load()是异步的,因此在您之后立即致电youWin()youLose()之前,它无法完成。您需要一个完成功能,以便在.load()成功完成后检查输赢。

refreshData()的结构应如下:

function refreshData() {
    $('#ajaxGame').load('RefreshCurrentPlayerServlet #ajaxGame', function() {
        youWin();
        youlose();
    });
}

你也应该改变这个:

t= self.setInterval('refreshData()',10000);

到此:

t = window.setInterval(refreshData, 10000);

我没有看到self被定义,因此也可能导致您的问题,您应该直接使用函数引用而不是放入字符串。

而且,作为一个清理问题,你应该改变这两个问题:

t = clearInterval(t);

到此:

clearInterval(t);

这是一个清理过的代码版本,它还消除了全局变量和不必要的函数定义:

$(document).ready(function() {
    var t = window.setInterval(function() {
        $('#ajaxGame').load('RefreshCurrentPlayerServlet #ajaxGame', function() {
            youWin();
            youlose();
        });
    }, 10000);

    function youWin()  {
        if ($('#status:contains("YOU ARE THE WINNER!")').length) {
            alert("YOU ARE THE WINNER!");
            clearInterval(t);
        }
    }

    function youlose() {
        if ($('#status:contains("You lost!")').length) {
            alert("You lost!");
            clearInterval(t);
        }
    }

});