jQuery不会重新启用按钮

时间:2016-08-24 16:22:17

标签: jquery button

我有一个简单的宾果游戏,我正在使用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!');
            }
        }

任何建议将不胜感激。提前谢谢。

1 个答案:

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