Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

jQuery .load() callback function fires multiple times

the first time the code is executed it correctly produces:
load complete

but the 2nd time it produces:
load complete
load complete

the 3nd time it produces:
load complete
load complete
load complete

etc... so the 20th time the load function completes the call back function gets fired 20 times.

$('#image-tag').load(function () {
        console.log("load complete");
    });
}).attr('src', 'image.jpg').appendTo('#main');

any idea what's causing the call back function to repeat/increase like this?

like image 999
Moudy Avatar asked Aug 15 '10 21:08

Moudy


2 Answers

It woulds like you're calling this inside a click handler or something else, this binds a new .load() handler each time. Either bind the .load() once, or use .one(), like this:

$('#image-tag').one('load', function () {
    console.log("load complete");
});
like image 146
Nick Craver Avatar answered Oct 23 '22 16:10

Nick Craver


That's because you are adding another event handler every time you run that code.

If you want to append an image tag into an element, you should not use an image that already is in the page. Create a new image tag instead:

$('<img/>').load(function () {
  console.log("load complete");
}).attr('src', 'image.jpg').appendTo('#main');
like image 36
Guffa Avatar answered Oct 23 '22 15:10

Guffa