Javascript 交替单击时设置超时和清除超时

Javascript 交替单击时设置超时和清除超时,javascript,jquery,html,Javascript,Jquery,Html,我试图创建一个任务管理系统的前端,但我遇到了设置超时问题。我试图让它,当用户点击复选框,瓷砖褪色到33%不透明度/切换一个“完成”类,等待2秒,然后消失;如果用户在复选框消失之前再次单击该复选框,则任务应切换该类并清除超时 我很难让clearTimeout命令正常工作。我在相关块之外声明了计时器变量,尝试将clearQueue()和stop()命令添加到函数中,并对拼写进行了三次检查 我的JS小提琴在这里: 以下是我的相关JS: $('#alltasks .taskitem form').cli

我试图创建一个任务管理系统的前端,但我遇到了设置超时问题。我试图让它,当用户点击复选框,瓷砖褪色到33%不透明度/切换一个“完成”类,等待2秒,然后消失;如果用户在复选框消失之前再次单击该复选框,则任务应切换该类并清除超时

我很难让clearTimeout命令正常工作。我在相关块之外声明了计时器变量,尝试将clearQueue()和stop()命令添加到函数中,并对拼写进行了三次检查

我的JS小提琴在这里:

以下是我的相关JS:

$('#alltasks .taskitem form').click( function ( event ) {
  event.preventDefault();
  // Variables for different referenced elements
  var tile = $( this ).parent('.taskitem');
  var taskContents = '<div class=\'taskitem\' draggable=\'true\'>' + tile.html() + '</div>';
  var timer;

  // Unchecking a checked task
  if (tile.hasClass('completed')) {
    clearTimeout( timer );
    tile.clearQueue().stop().fadeTo( 300, 1 );
  } else { // Checking an unchecked task
    tile.fadeTo( 300, 0.33 );
    timer = setTimeout( function() {
      alert("the task disappears");
    }, 2000 );
  }
  tile.toggleClass('completed');

});
$('alltasks.taskitem表单')。单击(函数(事件){
event.preventDefault();
//不同引用元素的变量
var tile=$(this.parent('.taskitem');
var taskContents=''+tile.html()+'';
无功定时器;
//取消选中选中的任务
if(tile.hasClass('completed')){
清除超时(计时器);
tile.clearQueue().stop().fadeTo(300,1);
}else{//检查未检查的任务
瓦.法代托(300,0.33);
计时器=设置超时(函数(){
警报(“任务消失”);
}, 2000 );
}
tile.toggleClass(“已完成”);
});
同样,我希望用户能够在2000毫秒计时器启动之前再次单击复选框并清除计时器

你知道我错过了什么吗



编辑:我现在觉得自己很傻。将我的计时器声明移到click handler函数之外可以使其正常工作。

计时器的作用域是本地的,因此每次调用它时都有一个新的作用域


变量计时器需要在click函数之外声明。

计时器的作用域是本地的,因此每次调用它时,您都有一个新的作用域


变量计时器需要在click函数之外声明。

计时器的作用域是本地的,因此每次调用它时,您都有一个新的作用域


变量计时器需要在click函数之外声明。

计时器的作用域是本地的,因此每次调用它时,您都有一个新的作用域


变量计时器需要在click函数之外声明。

您的计时器在第一个“click”函数中的作用域。如果将var计时器移到click回调之外,它就会工作。您只需检查计时器何时启动,看看它是否仍然“完成”

您的计时器在第一个“单击”功能中的作用范围。如果将var计时器移到click回调之外,它就会工作。您只需检查计时器何时启动,看看它是否仍然“完成”

您的计时器在第一个“单击”功能中的作用范围。如果将var计时器移到click回调之外,它就会工作。您只需检查计时器何时启动,看看它是否仍然“完成”

您的计时器在第一个“单击”功能中的作用范围。如果将var计时器移到click回调之外,它就会工作。你可以检查一下计时器何时启动,看看它是否仍然“完成”

哇,我觉得自己像个白痴。谢谢(我刚刚移动了我的var计时器;退出了我的click handler函数)哇,我觉得自己像个白痴。谢谢(我刚刚移动了我的var计时器;退出了我的click handler函数)哇,我觉得自己像个白痴。谢谢(我刚刚移动了我的var计时器;退出了我的click handler函数)哇,我觉得自己像个白痴。谢谢(我刚刚移动了var计时器;退出了click handler函数)