无法第二次读取未定义的属性

时间:2017-06-19 11:16:20

标签: javascript jquery arrays jquery-ui

我在制作单人纸牌游戏时遇到了一些问题。

我在剩余的牌组上工作,点击后,将显示剩余的牌,这样玩家可以在点击牌组时循环浏览它们。

问题本身:当您点击卡片代码时,会生成一个图片文件名,从2个不同的数组中获取参数。

点击卡片后第一次出现没有任何错误,但是当第二次尝试点击时出现错误:"无法读取属性' Taskai'未定义"。

代码:

$.widget("Game.RemainingDeck", {
  options: {
    remainingDeck: []
  },

  _create: function() {
    var game = this;
    game.flipACard();

  },
  flipACard: function() {
    var i = 0;
    var game = this;

    $("#remDeck").click(function() {

      var remainDeck = game.options.remainingDeck;


      var remDeck = $('#remDeck');
      var oppenedCard = $('#openCard');
      var card = $('<div class=" card"></div> ');

      var imageName = remainDeck[i].Taskai + '_of_' + remainDeck[i].Simbolis + '.png';
      var imagePath = 'texture/' + imageName;

      card.css('background-image', 'url("' + imagePath + '")');

      if (i = game.options.remainingDeck.lenght) {
        aler("kaladë prasideda ið naujo");
      }

      i++;
      oppenedCard.append(card);

    });
  }
})

1 个答案:

答案 0 :(得分:2)

i需要是外部var,否则每次点击处理程序运行时都为0

此外,我认为点击处理程序不应附加在.flipcard()中,否则每次运行flipCard()时都会反复附加点击处理程序。尝试在.create_()中附加点击处理程序。

$.widget("Game.RemainingDeck", {
    options: {
        remainingDeck: []
    },
    _create: function() {
        var game = this;
        var i = 0;
        $("#remDeck").on('click', function() {
            $('#openCard').append($('<div class=" card"></div>').css('background-image', 'url("texture/' + game.options.remainingDeck[i].Taskai + '_of_' + game.options.remainingDeck[i].Simbolis + '.png")'));
            if(i === game.options.remainingDeck.length) {
                alert("kaladë prasideda ið naujo");
            }
            i++;
        });
        this.flipACard();
    },
    flipACard: function() {
        $("#remDeck").click();
    }
})

大概你.pop()(或.shift())卡在remainingDeck的某个位置?你可以在翻转时这样做,在这种情况下i计数器是不必要的。