removeClass在超时不起作用

时间:2017-06-08 15:54:03

标签: javascript

我解决了问题

我在下一行添加了一个超时函数,用于清空数组。

我是一个新的javascript,这是我的代码

数组是一个带有跨度的数组。

            pickedArray[0].removeClass('show');
            pickedArray[1].removeClass('show');

这可行,但速度太快。

然而,当我喜欢这个时

        setTimeout(function(){  
            pickedArray[0].removeClass('show');
            pickedArray[1].removeClass('show');

        }, 100);

我收到错误“无法读取未定义的属性'removeClass'”

我该如何纠正?

由于

这是我的代码,我知道它很乱,但我只是想让它起作用。

var activeCards = 0;
var firstPick = 0;
var secondPick = 0;
var pickedArray = [];

$('.card').click(function() {
    console.log('I was clicked.' + ' ' + activeCards);
    activeCards++;
    var span = $(this).find('span');
    pickedArray.push(span);
    console.log(span.text())
    span.addClass('show')
    if (activeCards == 1) {
        firstPick = span.text();
    } else {
        secondPick = span.text();
        activeCards = 0;
        if (firstPick == secondPick) {
            console.log(firstPick + " " + secondPick)
            setTimeout(function() {
                alert("You got a match");
            }, 100);
            pickedArray[0].parent().addClass('matched');
            pickedArray[1].parent().addClass('matched');

        } else {


            setTimeout(function() {
                  pickedArray[0].removeClass('show');
                  pickedArray[1].removeClass('show');;

            }, 100);

        }
        pickedArray = []
    }
});

1 个答案:

答案 0 :(得分:0)

在致电setTimeout后,您立即说:

pickedArray = []

用空数组覆盖它。

100ms之后,pickedArray[0]因此未定义。

您可以将数组作为参数传递给函数:

setTimeout(function(myArray) {
      myArray[0].removeClass('show');
      myArray[1].removeClass('show');;

}.bind(null, pickedArray), 100);