0

项目 --> http://codepen.io/urketadic/pen/YpLgBX
描述 -->当不再选中复选框时,我想清除此功能的超时。

  var holder2 = setTimeout(function() { 
  $("#matrix2").css('display','block'); },26570);

当你点击矩阵时,小青蛙应该在 26 秒后开始跳舞,问题是,如果你取消矩阵模式并点击提交(比如说在第 22 秒)然后真的很快再次启用矩阵模式,青蛙会在 4 秒后开始跳舞26,因为超时仍在运行。

问题 ->这不起作用:

clearTimeout(holder2);

也试过:

holder2.clearTimeout();

整个代码

$("#Confirm").on('click', function () {
    if (document.getElementById('matrixcheckbox').checked) {
        matrixreset();
        $("#unmute").show();
        $("#matrix2").css('visibility', 'visible');
        player.playVideo();

        var holder = setTimeout(function () {
            $("#matrix1").css('display', 'block');
        }, 1900);
        var holder2 = setTimeout(function () {
            $("#matrix2").css('display', 'block');
        }, 26570);

        $("#pi").css('background-image', 'url(' + 'http://i1007.photobucket.com/albums/af198/GoDHanD/My%20FS%20Profile/RedMatrix.gif' + ')');
    } else {
        matrixreset();
        clearTimeout(holder);
        clearTimeout(holder2);
    }
});
4

2 回答 2

3

这是一个范围问题。每次执行此回调函数时,它将:

  1. holder立即为and创建新的未定义变量holder2因为var声明被提升到函数的顶部)。
  2. 输入条件

    一种。要么为这些新变量赋值

    湾。clearTimeout在未定义的变量上运行。

在任何时候都没有定义和清除变量。

一种解决方案是在回调之外声明 timeoutID 变量,因此它在调用之间持续存在(第一行):

var holder, holder2;

$("#Confirm").on('click', function () {
    if (document.getElementById('matrixcheckbox').checked) {
        matrixreset();
        $("#unmute").show();
        $("#matrix2").css('visibility', 'visible');
        player.playVideo();

        holder = setTimeout(function () {
            $("#matrix1").css('display', 'block');
        }, 1900);
        holder2 = setTimeout(function () {
            $("#matrix2").css('display', 'block');
        }, 26570);

        $("#pi").css('background-image', 'url(' + 'http://i1007.photobucket.com/albums/af198/GoDHanD/My%20FS%20Profile/RedMatrix.gif' + ')');
    } else {
        matrixreset();
        clearTimeout(holder);
        clearTimeout(holder2);
    }
});
于 2017-01-05T18:22:39.233 回答
2

这是一个范围问题,请在点击处理程序之外定义变量,如下所示

var holder,holder2;

$("#Confirm").on('click', function () {
    if (document.getElementById('matrixcheckbox').checked) {
        matrixreset();
        $("#unmute").show();
        $("#matrix2").css('visibility', 'visible');
        player.playVideo();

        holder = setTimeout(function () {
            $("#matrix1").css('display', 'block');
        }, 1900);
        holder2 = setTimeout(function () {
            $("#matrix2").css('display', 'block');
        }, 26570);

        $("#pi").css('background-image', 'url(' + 'http://i1007.photobucket.com/albums/af198/GoDHanD/My%20FS%20Profile/RedMatrix.gif' + ')');
    } else {
        matrixreset();
        clearTimeout(holder);
        clearTimeout(holder2);
    }
});
于 2017-01-05T18:18:59.123 回答