Skip to main content

Bug Tracker

Side navigation

#6576 closed bug (duplicate)

Opened May 17, 2010 10:45AM UTC

Closed April 17, 2011 05:58PM UTC

Last modified April 17, 2011 05:58PM UTC

delay() and clearQueue() combination is problematic and incorrect

Reported by: JurekRaben Owned by:
Priority: undecided Milestone:
Component: queue Version: 1.4.2
Keywords: needsreview Cc:
Blocked by: Blocking:
Description

Try this code:

$("element").delay(800).fadeOut(400);

$("element").clearQueue();

$("element").delay(8000).fadeTo(0,1).fadeTo(400,0.5);

The first queue with delay(800) will be cleared by clearQueue(). The new queue with delay(8000) will be executed with the delay value 800 of the first queue and not with 8000!

I think this bug can cause a lot of confusion and should be fixed.

In my opinion this happens because the return value of setTimeout in queue.js is not saved and won't be cleared with clearTimeout() in clearQueue().

If the second queue wasn't there, delay() would be still executed, but result in no operation, because the queue of the element would be empty. But the second delay-queue now again fills the queue of the element. So the first delay, not properly killed, will execute the next queue element of the second queue by execute jQuery.dequeue()...

Of course the second delay will execute too, no matter of clearQueue()-calls. This furthermore will cause lots of confusion.

Attachments (3)
  • queue.js (3.5 KB) - added by JurekRaben May 18, 2010 09:18AM UTC.

    fixed

  • queuedelaytest.html (3.1 KB) - added by JurekRaben May 18, 2010 09:19AM UTC.

    added new tests

  • test.html (3.2 KB) - added by JurekRaben May 17, 2010 07:24PM UTC.

    Tests for new queue.js

Change History (8)

Changed May 17, 2010 07:29PM UTC by JurekRaben comment:1

__.delay() bugfix and extension__

Needs more testing...

Updated description .delay()

.delay( [ delayId ], duration, [ queueName ] )

  • delayId = An optional string containing the name of the delay id. The delay can be interrupted by using * .removeDelay( delayId ).
  • duration = An integer indicating the number of milliseconds to delay execution of the next item in the queue.
  • queueName = A string containing the name of the queue. Defaults to fx, the standard effects queue.

Updated description .clearQueue()

.clearQueue( [ queueName ] )

  • queueNameA = string containing the name of the queue. Defaults to fx, the standard effects queue.

Also clears all delays of the element.

New description .removeDelay( [ delayId ], [ queueName ] )

.delay( [ delayId ], duration, [ queueName ] )

  • delayId = An optional string containing the name of the delay id. If no delayId is given, the last delay of the element will be canceled.
  • queueName = A string containing the name of the queue. Defaults to fx, the standard effects queue.

Currently you need to clear all delays of an element, before you can append new operations the the element or you call .clearQueue() first.

Changed May 17, 2010 09:12PM UTC by JurekRaben comment:2

Link to the git fork: git://github.com/JurekRaben/jquery.git

Changed October 07, 2010 02:56PM UTC by mot comment:3

This bug is really annoying.

It will be fixed in 1.4.3?

Changed October 18, 2010 11:52PM UTC by snover comment:4

keywords: → needsreview
priority: → undecided

Changed November 12, 2010 02:39AM UTC by snover comment:5

milestone: 1.4.3

Resetting milestone to future.

Changed March 17, 2011 11:36AM UTC by marcel@northdocks.com comment:6

Stumbled over that bug too. Here's a minimal jsFiddle http://jsfiddle.net/gpxG5/1/ for that issue.

Changed April 17, 2011 05:58PM UTC by john comment:7

resolution: → duplicate
status: newclosed

Yeah, this is a duplicate of #6150.

Changed April 17, 2011 05:58PM UTC by john comment:8

Duplicate of #6150.