我有这个使用jQuery的js代码卡匹配游戏。到目前为止,我已经尝试过了,但是当我比较两组卡片时,即使我单击的两张卡片不匹配,它也始终进入条件card match

这方面似乎是什么问题,请帮忙!

这是在pair_Cards函数中:

// compare two class selected
if ($('.selected').length == 2) {
  // first and last data is same data value = match
  if ($('.selected').first().data('card-id') == $('.selected').last().data('card-id')) {
    alert("Card Match");
  } else {
    alert("Card not match");
  }
}


我有下面的完整代码:



$(document).ready(function() {
  var app = {
    cards: ["ace_of_clubs.png", "ace_of_clubs.png",
      "2_of_clubs.png", "2_of_clubs.png",
      "3_of_clubs.png", "3_of_clubs.png",
      "4_of_clubs.png", "4_of_clubs.png",
      "5_of_clubs.png", "5_of_clubs.png",
      "6_of_clubs.png", "6_of_clubs.png"
    ],
    init: function() {
      app.shuffle_cards();
    },
    shuffle_cards: function() {
      var random, temp;

      for (i = 1; i < app.cards.length; i++) {
        random = Math.round(Math.random() * i);
        temp = app.cards[i];
        app.cards[i] = app.cards[random];
        app.cards[random] = temp;
      }
      console.log(app.cards);
      app.assign_Cards();
    },
    assign_Cards: function() {
      $('#distribute').click(function() {
        $('.card_ img').css({
          "opacity": "0"
        });
        $('.card_').addClass('removebg');

        $('.card_ img').each(function(index) {
          // assign each images randomly on each section
          $(this).attr("src", "img/" + app.cards[index]);
          // get the length value of each data attribute declaration
          $(this).attr("data-card-id", app.cards[index].length);
        });
        alert("Cards has been assigned randomly.");
        app.click_Handlers();
      })
    },
    click_Handlers: function() {
      $('.card_ img').click(function() {
        // add card-id data attribute
        $(this).data('card-id');
        $(this).addClass('selected');
        $(this).css({
          "opacity": "1"
        });
        app.pair_Cards();
      });
    },
    pair_Cards: function() {
      if ($('.selected').length == 2) {
        // first and last data is same data value = match
        if ($('.selected').first().data('card-id') == $('.selected').last().data('card-id')) {
          alert("Card Match");
        } else {
          alert("Card not match");
        }
      }
    }
  };
  app.init();
});

.wrapper {
  margin: 0 auto;
  padding: 0;
  position: relative;
  max-width: 100%;
  width: 1080px;
}

[class^="card_"] {
  background: url(img/back.png) no-repeat center top;
  display: inline-block;
  vertical-align: top;
  position: relative;
  width: 159px;
  height: 238px;
  border: 2px solid #000;
  margin: 0 auto 6px;
}

[class^="card_"] img {
  width: 157px;
  height: 238px;
}

.main_con {
  text-align: center;
  position: relative;
}

.removebg {
  background: none;
}

#distribute {
  display: block;
  margin: 30px auto 10px;
  border: 2px solid #000;
  background: #f00;
  color: #fff;
  text-transform: uppercase;
  padding: 0;
  border-radius: 5px;
  width: 200px;
  height: 45px;
  line-height: 45px;
  text-decoration: none;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="main_con">
  <div class="wrapper">
    <div class="card_"><img src="" alt="" class="unmatched"></div>
    <div class="card_"><img src="" alt="" class="unmatched"></div>
    <div class="card_"><img src="" alt="" class="unmatched"></div>
    <div class="card_"><img src="" alt="" class="unmatched"></div>
    <div class="card_"><img src="" alt="" class="unmatched"></div>
    <div class="card_"><img src="" alt="" class="unmatched"></div>
    <div class="card_"><img src="" alt="" class="unmatched"></div>
    <div class="card_"><img src="" alt="" class="unmatched"></div>
    <div class="card_"><img src="" alt="" class="unmatched"></div>
    <div class="card_"><img src="" alt="" class="unmatched"></div>
    <div class="card_"><img src="" alt="" class="unmatched"></div>
    <div class="card_"><img src="" alt="" class="unmatched"></div>

    <a href="#" id="distribute">Distribute Cards</a>
  </div>
</div>

最佳答案

只要为每张卡分配相同的ID,您的逻辑就可以正常工作:

$(this).attr("data-card-id", app.cards[index].length);


无论您点击哪张卡,都将获得“匹配”结果。

您可能需要将上面的代码更改为此

$(this).attr("data-card-id", app.cards[index]);


更新:

另外,将if语句更新为:

if($('.selected').first().find('img').data('card-id') === $('.selected').last().find('img').data('card-id'))


您已将数据属性分配给img元素,并且尝试从div元素读取数据属性。

09-28 12:55