我有一个" 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/
在理解我做错了什么的时候,任何指针都会受到高度赞赏。 谢谢。
答案 0 :(得分:2)
actiontohide
是全局的,因此每次点击都会覆盖它。
actiontohide = $("div").find("[data-id='" + data + "']");
应该是
var actiontohide = $("div").find("[data-id='" + data + "']");