Для начала я просмотрел другие посты с той же ошибкой, и у них не было ответа на мой специфический вопрос: почему эта проклятая ошибка появляется для me * 1004?* ???
Код должен создавать кучу карт для игры на память.Когда вы нажимаете на карточки, они должны «перевернуться», переходя от одного изображения к другому.Я могу создать карты с помощью createBoard ();однако кроме этого ничего не происходит, кроме как в консоли написано «Uncaught TypeError: невозможно прочитать свойство getAttribute из undefined».Как это исправить?Я так долго обдумывал это, и я в полном замешательстве.
// stores cards available for memory game
let cards = [
{
rank: 'queen',
suit: 'hearts',
cardImage: 'images/queen-of-hearts.png'
},
{
rank: 'queen',
suit: 'diamonds',
cardImage: 'images/queen-of-diamonds.png'
},
{
rank: 'king',
suit: 'hearts',
cardImage: 'images/king-of-hearts.png'
},
{
rank: 'king',
suit: 'diamonds',
cardImage: 'images/king-of-diamonds.png'
}
];
// stores flipped cards
let cardsInPlay = [];
/*
if two cards have been flipped
checks for match, alerts to success/failure
*/
let checkForMatch = () => {
if (cardsInPlay.length === 2) {
alert((cardsInPlay[0] === cardsInPlay[1]) ?
'You found a match!' :
'Sorry, try again.');
}
}
/*
retrieves the card id from the element that was clicked
adds the card to cardsInPlay
changes the imagesrc of the element
calls checkForMatch()
*/
let flipCard = () => {
let cardId = document.this.getAttribute('data-id');
cardsInPlay.push(cards[cardId].rank);
document.this.setAttribute('src', cards[cardId].cardImage);
checkForMatch();
}
/*
appends 4 imgs with sequential IDs
to the div with id='game-board'
each img listens for click, which calls flipCard()
*/
let createBoard = () => {
for (let i = 0; i < cards.length; i++) {
var cardElement = document.createElement('img');
cardElement.setAttribute('src', 'images/back.png');
cardElement.setAttribute('data-id', i);
cardElement.addEventListener('click', flipCard);
document.getElementById('game-board').appendChild(cardElement);
}
}
// instantiate gameboard
createBoard();
Вот сопровождающий HTML-код:
<!DOCTYPE html>
<html>
<head>
<title>Memory Card Game</title>
<link href="https://fonts.googleapis.com/css?family=Droid+Serif|Raleway:400,500,600,700" rel="stylesheet">
<link href="css/reset.css" rel="stylesheet" type="text/css">
<link href="css/style.css" rel="stylesheet" type="text/css">
</head>
<body>
<header>
<h1>MEMORY GAME</h1>
</header>
<nav>
<a class="nav" href="#">RULES</a> |
<a class="nav" href="#">GAME</a>
</nav>
<main>
<h2>RULES</h2>
<p>Concentration, also known as Match Match, Memory, Pelmanism, Shinkei-suijaku, Pexeso, or simply Pairs, is a card game in which all of the cards are laid face down on a surface and two cards are flipped up over each turn. The object of the game is to turn over pairs of matching cards</p>
<div id="game-board" class="board clearfix"></div>
</main>
<footer class="clearfix">
<p class="copyright">Copyright 2017</p>
</footer>
<script src="js/main.js"></script>
</body>
</html>
Пожалуйста, сенсей, учите меня.
обновление: чтобы ответить на любые вопросы о моих намерениях, я добавил комментарии и HTML