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