Функция выполняется до того, как она должна - PullRequest
0 голосов
/ 20 ноября 2018

У меня проблемы с функцией, выполняющейся раньше, чем должна. В функции matchCheck функция funcRemove вызывается до alert('No match'). Сначала я пытаюсь вызвать оповещение, затем функцию funcRemove (как только оповещение исчезнет).

Вот код:

const listAddCard = document.querySelectorAll('.card');
const moveElem = document.querySelector('.moves');

for(i=0; i<listAddCard.length; i++){

    listAddCard.item(i).appendChild(shuffleCards[i]);
    if(i>0){
        if(shuffleCards[i].classList.value === shuffleCards[0].classList.value){
            listAddCard.item(i).classList.add('match');
        }
    }
    else listAddCard.item(i).classList.add('match'); 
}
let turnCheck = 0;
let cardChecker = '';
let prevCard = '';
let moves = 3;

let matchCheck = function(evtObj){
  // console.log(turnCheck);
     if(turnCheck===1){
        // setTimeout(function(){}, 1000);
        if(evtObj.target.innerHTML===cardChecker){
            evtObj.target.classList.add('match');
            prevCard.classList.add('match');
        }
        else{

            alert('No match!');
        }
        funcRemove(prevCard, evtObj);
        turnCheck = 0;
        cardChecker = '';
        prevCard = '';
        moves++;
        moveElem.innerHTML = moves;
        return;
     }
     prevCard = evtObj.target;
     cardChecker = evtObj.target.innerHTML;
     turnCheck++;
 }

 let funcShow = function(evtObj){
    evtObj.target.classList.add('open');
    evtObj.target.classList.add('show');
 }

const cardDeck = document.querySelectorAll('.card');
 for(var i=0;i<cardDeck.length;i++){
     cardDeck[i].addEventListener('click', funcShow);
     cardDeck[i].addEventListener('click', matchCheck);

    }

let funcRemove = function (p1,p2){

        p1.classList.remove('open');
        p1.classList.remove('show');    
        p2.target.classList.remove('open');
        p2.target.classList.remove('show');
}

1 Ответ

0 голосов
/ 20 ноября 2018

В некоторых браузерах alert() является асинхронным, поэтому сценарий продолжает работать, пока отображается сообщение.

Если вы хотите подождать, пока пользователь не закроет диалоговое окно, прежде чем продолжить, используйте confirm() вместоalert().

...