setTimeout搞砸了变量javascript

时间:2012-05-25 17:37:21

标签: javascript jquery variables settimeout

我遇到了一段脚本,它在删除了一个对象后,在获得该课程后隐藏了一段时间&#39; <39>

selector = getselector($(this).parent().parent());
console.log("Clicked Cancel");
$(this).parent().parent().addClass('hidden');
setTimeout(function() {
    $(selector).remove();
}, 400);

我编辑了here的一些脚本以使函数 getselector ,因为$(this)不能在setTimeout中工作。 现在这段代码可以正常工作,只要你不再快速运行它。 问题似乎是变量 selector 在另一个节点在时间跨度内被删除时被搞砸了(目前为400ms)

我无法想到一个简单的方法。 :(

3 个答案:

答案 0 :(得分:1)

答案很简单:不要使selector全局,即使用var。哦,只是存储元素而不是尝试构建选择器:

var elem = $(this).parent().parent();
elem.addClass('hidden');
setTimeout(function() {
    elem.remove();
}, 400);

答案 1 :(得分:1)

您还可以通过以下方式对删除进行排队,这会使您的代码更加麻烦:

$(this).parent().parent().addClass('hidden').delay(400).queue(function() {
   $(this).remove();
});

答案 2 :(得分:-1)

在流程开始时设置值为true的变量。在操作上,检查它是否为false,然后将其设置为false,然后在完成后返回true。如果你点击它太快,它将检查你的变量,再次看到它是真的并将再次执行操作。