函数在执行之前应该执行

时间:2018-11-20 00:23:07

标签: javascript function addeventlistener callstack

我在执行某个功能之前就遇到了问题。在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 :(得分:0)

在某些浏览器中,alert()是异步的,因此脚本在显示消息时保持运行。

如果要在继续之前等待用户关闭对话框,请使用confirm()代替alert()