0

I am using jQuery's ajax function $.get() to download data from a page. I then cast that data to a jQuery object with $(data), allowing it to construct a DOM tree. I then append this data using append()

Is there a way for jQuery to fire an event similar to load which would tell me when the data's iframes/images/videos are done loading? Either before or after the append()?

According to the jQuery documentation, the load event only fires on specific objects:

This event can be sent to any element associated with a URL: images, scripts, frames, iframes, and the window object.

I could loop through all of the data and attach a load listener to each of these objects, then count how many there are and have the load handler count how many have loaded (or have already been cached) until the number reaches the total. However I am looking for an alternative to this solution.

I have tried to attach the load event to the window object through load() and on() but these only fire once when the active page is initially loaded.

Here is my code:

$.get(url_string, function(data) {
    // Create DOM elements out of the downloaded html text 'data'
    // and take a subset of the DOM elements, where the id is #content
    var myContents = $(data).find("#content");

    // Insert DOM elements into the active page
    $("#destination").append(myContents);

    // Check when all images/iframes/video elements have loaded
    // Does not work
    $("#destination").load(function() {
        alert("new stuff loaded");
    });

    // Does not work either
    myContents.load(function() {
        alert("new stuff loaded");
    });
});

This question is linked to

but the solution offered in these are all the one I mentioned above, where I would have to count how many of the objects there are, then check when the total is reached.

Community
  • 1
  • 1
Daniel
  • 8,655
  • 5
  • 60
  • 87

2 Answers2

0

You are attempting to assign load events after content is loaded. Define them before appending the content.

Try this one,

$.get(url_string, function(data) {
    // Create DOM elements out of the downloaded html text 'data'
    // and take a subset of the DOM elements, where the id is #content
    var myContents = $(data).find("#content");

    // Check when all images/iframes/video elements have loaded
    $("#destination").load(function() {
        alert("new stuff loaded");
    });

    myContents.load(function() {
        alert("new stuff loaded");
    });

    // Insert DOM elements into the active page
    $("#destination").append(myContents);
});
Okan Kocyigit
  • 13,203
  • 18
  • 70
  • 129
  • Thanks for the suggestion ocanal! I tried this out but it did not work. This is understandable since `load()` isn't designed to be attached to tags other than those mentioned in the documentation. – Daniel Oct 11 '12 at 16:36
  • 2
    Your answer might be confusing to the reader since you've kept all the original comments that say, `does not work`, `does not work either`, etc. – Sparky Oct 11 '12 at 20:01
0

Currently, the latest version of jQuery (1.8.2) doesn't have support for firing DOM ready events when HTML is appended.

Daniel
  • 8,655
  • 5
  • 60
  • 87