2

我是 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();
}
4

1 回答 1

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);
        }
    }

});
于 2012-03-15T01:41:05.997 回答