【问题标题】:jQuery delay gets ignored and executes siblingsjQuery延迟被忽略并执行兄弟
【发布时间】:2012-03-26 22:00:48
【问题描述】:

我正在使用来自 Google CDN 的 jQuery 版本 1.7.1,并具有以下代码:

$(menuInstance).delay(2000).removeClass('loading').html(ul);

但是延迟被忽略,它直接移动到我的删除类并插入 HTML。任何想法为什么延迟被忽略?谢谢

【问题讨论】:

  • 您是否在 $(document).ready() 块内调用该代码?
  • 我认为延迟只适用于fade之类的jquery效果。
  • api.jquery.com/delay : "只有队列中的后续事件被延迟;例如,这不会延迟不使用效果队列的 .show() 或 .hide() 的无参数形式。” removeClass 也不使用效果队列。 (不要难过;我们都曾尝试过以这种方式使用 delay()。)
  • 看看我的解决方案 qith 延迟和排队 - 没有动画。

标签: jquery


【解决方案1】:

你不能这样使用.delay。您需要使用setTimeout

setTimeout(function() {
  $(menuInstance).removeClass('loading').html(ul);
}, 2000);

delay 只能用于animation 队列。

【讨论】:

    【解决方案2】:

    延迟仅适用于可以像动画一样排队的方法:http://api.jquery.com/delay/

    您将需要使用超时。我们的你可以使用http://api.jquery.com/queue/

    【讨论】:

      【解决方案3】:

      .delay() 不是这样做的..

      查看http://api.jquery.com/delay/的文档

      引用

      说明:设置一个计时器以延迟执行队列中的后续项目

      .delay() 方法最适合在排队的 jQuery 效果之间进行延迟。因为它是有限的——例如,它不提供取消延迟的方法——.delay() 不能替代 JavaScript 的原生 setTimeout 函数,这可能更适合某些用例。

      如您所见,它仅适用于 jQuery 队列。

      【讨论】:

        【解决方案4】:

        http://jsbin.com/ohipew/edit#javascript,html

         $(menuInstance).delay(2000).queue(
        
          function (a)
          {
              $(this).removeClass('loading').html(ul)
          });
        

        【讨论】:

          【解决方案5】:

          .delay() 用于延迟 jquery 视觉效果。 对于.remove(),您应该使用setTimeout

          另见: jQuery: append() object, remove() it with delay()

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-01-15
            • 1970-01-01
            • 2013-11-15
            • 2013-04-29
            • 2020-05-12
            • 1970-01-01
            相关资源
            最近更新 更多