【问题标题】:jquery catch delayed each is finished?jquery catch 每次都延迟完了?
【发布时间】:2014-10-31 18:18:07
【问题描述】:
$("#div_game_container").on("click", ".square", squareClick);

function squareClick() {
    var group = $(this).data("group");

    if ($("." + group).hasClass("active")) {

        // off click event
        $("#div_game_container").off("click", ".square", squareClick);

        $("." + group).each(function (index) {
            $(this).delay(100 * index).fadeOut(100);
        });

        // on click event. this line does not wait "each" function 
        $("#div_game_container").on("click", ".square", squareClick);
}

上面的代码不起作用。实际上,它有效,但不是我的预期。我注释掉了问题所在。

我也像这样添加延迟:

$("#div_game_container").delay(each_delay_time).on("click", ".square", squareClick);

但没有变化。我怎样才能捕捉到“每个”迭代已经完成?我想在每个方法运行时阻止点击事件,并且在每个方法完成后,然后激活点击事件

【问题讨论】:

  • 您是说要确保在执行重新绑定之前已遍历整个组?
  • 有正方形集/组,当我单击组的正方形时,它们会淡出。此时,用户没有点击其他方格。每个组不能同时淡出...

标签: jquery delay each


【解决方案1】:

使用.promise() 对象:

$("." + group).each(function (index) {
    $(this).delay(100 * index).fadeOut(100);
});
$("." + group).promise().done(function() {
    $("#div_game_container").on("click", ".square", squareClick);
});

【讨论】:

  • 继续。可以将事件附加到each,因此只有一个$("." + group)
  • 太棒了。非常感谢。
  • @gillesc 当然可以!为了便于阅读,我将它(在这种情况下)隔离开来。
  • @DevlshOne,如果我在 promise().done() 中有另一个“each”函数,如果它完成了,我该如何捕捉第二个“each”方法?我添加了嵌套的 promise().done() 但不起作用。请帮帮我...
猜你喜欢
  • 1970-01-01
  • 2011-06-22
  • 1970-01-01
  • 1970-01-01
  • 2018-11-04
  • 1970-01-01
  • 1970-01-01
  • 2012-08-01
  • 2016-05-17
相关资源
最近更新 更多