• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Dodawanie stylu, do elementu , który został dynamicznie utworzony w JS.

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
276 wizyt
pytanie zadane 15 grudnia 2017 w JavaScript przez Madzia Thering Nowicjusz (120 p.)
zamknięte 15 grudnia 2017 przez Madzia Thering

Witam ;), 

jestem w czasie tworzenia gry. Obecnie jestem na etapie, gdzie chciałabym dodać zieloną ramkę, gdy obrazki są te same, czerwone gdy obrazki są różne. 

Mój dotychczasowy kod:

const game = document.getElementById('game');
let borderColors = document.getElementsByTagName('img');

let firstCard = null; 
let secondCard = null;

const config = {
    height: '100px',
    width: '100px',
    src: 'pictures/back-card.jpg',
    position: 'absolute',
    cardsize: 100,
    cardspacing: 10,
    columns: 4,
    rows: 3,
    time: 1000,
    greenBorder: '2px solid green',
    redBorder: '2px solid red'
}

function createGrid() {
    const cardsIndexes = [] 
    for (let i = 0; i < config.columns * config.rows / 2; i++) { 
        cardsIndexes.push(i);
        cardsIndexes.push(i);    
    }

    const shuffleCards = [];
    while (cardsIndexes.length > 0) {
        let random = Math.floor(Math.random() * cardsIndexes.length) 
        shuffleCards.push(cardsIndexes[random]); 
        cardsIndexes.splice(random, 1); 
    }

    for (let left = 0; left < config.rows; left++) { 
        for (let top = 0; top < config.columns; top++) { 
            renderCard(shuffleCards.pop(), left, top);
        }
    }
}

function renderCard(cardNum, top, left) {
    let card = document.createElement('img');   
    card.num = cardNum;
    card.src = config.src;
    card.style.position = config.position;
    card.style.top = (top * (config.cardsize + config.cardspacing) + config.cardspacing) + 'px';
    card.style.left = (left * (config.cardsize + config.cardspacing) + config.cardspacing) + 'px';
    card.style.height = config.height;
    card.style.width = config.width;
    card.onclick = turnCard;
    game.appendChild(card); 
}

function turnCard(e) {
    let card = e.target;
    if (firstCard === null) {
        firstCard = card;
        card.src = 'pictures/card' + card.num + '.jpg' 
    } else if (secondCard === null) {
        secondCard = card;
        card.src = 'pictures/card' + card.num + '.jpg'        
        setTimeout(checkCards, config.time)     }
}

function checkCards() {
    if (firstCard.num === secondCard.num) { 
        borderColors.style.border = '2px solid green';        
    } else {
        borderColors.style.border = config.redBorder;       
        firstCard.src = config.src;
        secondCard.src = config.src;
    }
    firstCard = null;
    secondCard = null; 
}

 

W funkcji checkCards(), chciałam dodać zielony 'border', gdy 'firstCard.num === secondCard.num'

następnie czerwony 'border', gdy firstCard.num jest różne od  secondCard.num.

Gdy zastosuje się do tego, otrzymuje błąd o treści: 'Uncaught TypeError: Cannot set property 'border' of undefined
    at checkCards
'

Uważam, że problem leży w let borderColors, który po console.log zwraca HTMLCollection [], zamiast pojedyńczy img. Jak mogę się 'dostać' do konretnych naciśniętych kart(img)?

Będę wdzięczna za pomoc. 

 

komentarz zamknięcia: Rozwiązałam problem sama.

Podobne pytania

0 głosów
1 odpowiedź 110 wizyt
0 głosów
1 odpowiedź 977 wizyt
pytanie zadane 20 września 2016 w JavaScript przez Protekton123 Użytkownik (700 p.)
0 głosów
1 odpowiedź 213 wizyt

93,166 zapytań

142,177 odpowiedzi

321,946 komentarzy

62,495 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 688p. - dia-Chann
  2. 676p. - CC PL
  3. 675p. - Łukasz Piwowar
  4. 664p. - Marcin Putra
  5. 662p. - Łukasz Eckert
  6. 649p. - Michal Drewniak
  7. 641p. - rafalszastok
  8. 641p. - rucin93
  9. 629p. - Piotr Aleksandrowicz
  10. 629p. - Adrian Wieprzkowicz
  11. 621p. - Dawid128
  12. 612p. - Mikbac
  13. 611p. - ksalekk
  14. 606p. - Mariusz Fornal
  15. 602p. - Michał Telesz
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...