我有一个简单的宾果游戏,我正在使用jQuery 1.12进行编写,部分内容是,我禁用了#34;获取新卡&#34;按钮(<button id="new_card">Get a New Card</button>
),代码如下:
$('#new_card').attr('disabled', 'disabled');
这适用于我安装的所有主流浏览器(IE11,Edge,FF48和Chrome52 - 全部在Windows 10,64位上),正如预期的那样。但是,当检测到宾果游戏时,应该重新启用该按钮的脚本部分失败。我已使用以下代码行尝试启用按钮:
$('#new_card').attr('disabled', false);
$('#new_card').removeAttr('disabled');
$('#new_card').prop('disabled', false);
在上面列出的每个主要浏览器中,所有这些方法都无法启用该按钮。我在这些代码行之前和之后都有console.log()
个语句,然后输出到控制台,所以我知道它们正在被执行。也没有出现任何错误。奇怪的是,如果我将这些代码行中的任何一行输入到JS控制台中,那么所有这三行都可以在我可以访问控制台的所有浏览器中工作。他们只是不在运行时工作。代码的完整上下文如下:
function newGame() {
clearInterval(ballTimer);
bingoCount = 0;
ballCount = 0;
selected = [];
var name = '';
if ($('#cbNewCard').is(':checked')) newCard();
ballTimer = setInterval(callBall, 5000);
gameInProgress = true;
$('#new_card').attr('disabled', 'disabled');
}
function stopGame() {
gameInProgress = false;
$('#new_card').attr('disabled', false);
$('#new_card').removeAttr('disabled');
$('#new_card').prop('disabled', false);
clearInterval(ballTimer);
}
function callBall(){
var num = false;
do {
num = getRand(1,75);
var name = getBall(num);
console.log(selected.length);
if (selected.length >= 75) return false;
} while (findThis(num, selected));
selected.push(num);
var newBall = $('<div>').addClass(name).html(name + num);
$('#called_numbers')
.append(newBall)
.animate({scrollTop: $('#called_numbers div:last-child').position().top});
ballCount++;
$('#ballCount').text(ballCount);
check4bingos();
if (bingoCount > 0) {
console.log('Got a BINGO!');
stopGame();
console.log('Got a BINGO!');
}
}
任何建议将不胜感激。提前谢谢。
答案 0 :(得分:1)
检查bingoCount的范围。
在脚本的顶部,您将bingoCount设置为全局变量0
var ballCount = 0;
var bingoCount = 0;
var ballTimer;
var gameInProgress = false;
var selected = [];
var inCard = [];
然后在check4bingos()中,您试图枚举变量var bingoCount
使范围成为本地变量。
本地与全球范例: https://jsfiddle.net/33y55tpa/
通过从bingoCount中删除var来更改check4bingos中的范围。那么你从callBall停止游戏的条件应该适用于我可以告诉你的全局范围bingoCount将始终为0。
一旦本地范围bingoCount&gt;您也在为ballTimer()运行clearInterval。 0所以bingoCount的逻辑&gt; 0 {stopGame()}永远不会运行,因为先前删除了运行该逻辑的间隔。
if (bingoCount > 0) {
console.log('Got a BINGO!');
clearInterval(ballTimer);
}