多次调用时setTimeout函数问题

时间:2014-08-09 09:54:41

标签: javascript jquery settimeout

我有一个" setTimeout"多次调用函数时出现问题。

当用户点击.icon时,会调用一个函数来隐藏设置为第三个数组参数的持续时间的div,然后显示它。

除非单击某个项目然后单击另一个项目,否则它可以正常工作。在这种情况下,持续时间设置为两个项目单击的最后一个。 我试图生成一个随机变量而不是var cooldowndata,但它没有工作。

Data-id具有以下内容:名称,价格和"超时"持续时间。

<div class="actions">
    <div class="actionholder">
        <div class="box"><div class="subbox"></div><div class="icon" data-id="ItemA|33|15000">ItemA 15s.</div></div>
        <div class="box"><div class="subbox"></div><div class="icon"  data-id="ItemB|21|6000">ItemB 6s.</div></div>
        <div class="box"><div class="subbox"></div><div class="icon"  data-id="ItemC|45|28000">ItemC 28s.</div></div>
    </div>
</div>

$(".icon").bind("click",function() {
var data = $(this).data("id");
cooldown(data);
});

function cooldown(data)
{
var cooldowndata =  data.split('|'); 
actiontohide = $("div").find("[data-id='" + data + "']");
actiontohide.hide();
setTimeout(function() { actiontohide.show(); }, cooldowndata[2]);
}

例如,您可以从项目B开始,然后项目C,C将在6秒后显示,而不是28秒: http://jsfiddle.net/xpqbccn3/

在理解我做错了什么的时候,任何指针都会受到高度赞赏。 谢谢。

1 个答案:

答案 0 :(得分:2)

actiontohide是全局的,因此每次点击都会覆盖它。

actiontohide = $("div").find("[data-id='" + data + "']");

应该是

var actiontohide = $("div").find("[data-id='" + data + "']");