Skip to main content

Bug Tracker

Side navigation

#6844 closed feature (duplicate)

Opened July 28, 2010 08:17PM UTC

Closed September 20, 2010 06:55PM UTC

Simple way for plugins to delay the ready event

Reported by: dareed Owned by:
Priority: Milestone: 1.4.3
Component: core Version: 1.4.2
Keywords: ready event Cc:
Blocked by: Blocking:
Description

Some plugins will need to load resources dynamically and asynchronously, and may wish for the jQuery ready event to wait until those resources are available, which may be as late as after the window.onload event.

The purpose for delaying the ready event might be for any reason though. Asynchronous loading via a script loader is the canonical example, but ideally jQuery would make no assumptions. An app developer could use it for example to delay lighting up the page with jQuery plugins until some UI interaction event occurs, for example.

This is the simplest way I could imagine it, and only adds a few lines of code to jQuery, and relies on no new globals or jQuery fns.

// delay the event
jQuery.ready(false);

This tells jQuery something is running and the ready event shouldn't fire. Of course, this is ignored if it has already fired. Also, this can be called any number of times by any number of plugins. Each time it is called, a corresponding 'true' signal must be sent:

// signal its ok to continue
jQuery.ready(true);

If the DOM is ready per the usual semantics, and no one else had signaled 'false', this raises the ready event immediately. If the DOM is not ready yet or other 'false' signals were sent, it waits.

Internally there's just a counter. Each call with 'false' increments it, and each call with 'true' decrements it. If the counter is less than or equal to 0, the event fires (assuming the DOM is also ready).

Attachments (0)
Change History (3)

Changed July 28, 2010 08:20PM UTC by dareed comment:1

Changed July 29, 2010 01:29AM UTC by dmethvin comment:2

That's an interesting idea!

Changed September 20, 2010 06:55PM UTC by john comment:3

resolution: → duplicate
status: newclosed

Duplicate of #6781.