Reputation: 163
My pages are generating dynamically by ajax response.
Each response has an img
element with specified id. I need them to fade in when loaded.
.load()
and .bind('load')
works fine when page is loaded for first time. But not working in next response for sure.
$('#my_img').load(function(){
$(this).hide().fadeIn('slow');
});
So i need to use .on()
event handler. But doesn't work.
$('body').on('load','#my_img',function(){
$(this).hide().fadeIn('slow');
});
Note: This is not a cache issue. Img src also has a random query string.
Upvotes: 5
Views: 912
Reputation: 2268
You could try using Jquery's ready event instead of on.load to run some code when the element is ready.
Here's a fiddle I made to demonstrate it in action: https://jsfiddle.net/yosefh/66g0xjre/1/
$(document).ready(function() {
$('div').click(function() {
var newDiv = $('<div></div>');
$(newDiv).ready(function() {
$(newDiv).fadeIn("slow");
});
$('body').append(newDiv);
});
});
Upvotes: -1
Reputation: 74420
onload
event doesn't bubble, so you cannot delegate it. But, if you don't need to support IE8<, you can capture event instead which will work for any dynamic img:
document.body.addEventListener(
'load',
function(event){
var elm = event.target;
if( elm.id === 'my_img'){ // or any other filtering condition
// do some stuff
}
},
true // Capture event
);
Upvotes: 4