I want to run some code when an image is loaded. Also, I’d like to do it unobtrusively (not inline). More specifically, I want to use jQuery’s live() function so it will happen for any dynamically loaded images.
I’ve tried:
<img class="content_image" alt="" src="..." />
<script>
$('.content_image').live('load', function() {
alert('loaded!');
});
</script>
In addition to load, I’ve tried onload, and onLoad. When I replace with ‘click’ all works as expected so I know it’s not some interfering bug.
I haven’t been able to find a list of available event types for the live() function, so for all I know, it may not be possible.
(It would be
load, notonloadoronLoad.)loaddoesn’t bubble (according to theimgentry in the HTML5 spec, it’s a “simple event”, which don’t bubble), so you can’t use it withliveordelegate, which rely on the event bubbling from an element to its ancestor element(s).You’ll have to hook it on the individual
imgelements (and do so before you set theirsrc, since otherwise you can miss it; and always remember to watch forerroras well). (Yes, you really can miss it: The browser is not single-threaded, just the JavaScript main thread. If you setsrcand the image is in cache or becomes available soon enough, the browser can fire the event. The way events are fired is that the browser looks to see what handlers are registered as of when the event is fired, and queues those to be called when the JavaScript main thread yields back to the browser. If there are no handlers registered, they aren’t queued, and you never get the callback.)