Etienne Dupuis
Etienne Dupuis

Reputation: 13806

jQuery .load() not working on my image

I have some code I am trying to run once my image has finished loading. I use this following jQuery code:

$("#myimageid").load(function() {
    alert('Image Loaded');
});

However the popup never show up. I can't get the .load() function to work ! Anyone had issues with this?

Upvotes: 44

Views: 26564

Answers (2)

Nick Craver
Nick Craver

Reputation: 630627

If you're running this after the image already has a set source, you need to do an additional check for caches images (who fired the event, just before you added an event handler listening for it). You can do that like this:

$("#myimageid").on('load', function() {
  alert('Image Loaded'); 
}).each(function() {
  if(this.complete) $(this).load();
});

Update for later versions of query, use:

if(this.complete) $(this).trigger('load');

Using (this).load(); will produce a Cannot read property 'indexOf' of undefined error

Upvotes: 117

David Hoerster
David Hoerster

Reputation: 28711

What happens when you clear your browser's cache and try the script again? From the jQuery load() docs:

It is possible that the load event will not be triggered if the image is loaded from the browser cache. To account for this possibility, we can use a special load event that fires immediately if the image is ready. event.special.load is currently available as a plugin

In general, it is not necessary to wait for all images to be fully loaded. If code can be executed earlier, it is usually best to place it in a handler sent to the .ready() method.

So it sounds like your cached image isn't triggering the load event, so you may want to try the plug-in that's mentioned. You can find the JS file to download here.

Hope this helps!

Upvotes: 0

Related Questions