I want to call a function after an element has been created. Is there a way to do this?
Example:
$(\"#myElement\").ready(function() {
// call the
Sometimes this is needed for a DOM element created/loaded outside of your own script, either by a different js library or an event outside of your direct control.
For such scenarios, I always set an interval which checks periodically whether the target element exists and if this is true, the interval deletes itself and runs a callback function.
For this, I have a predefined function which I reuse:
function runAfterElementExists(jquery_selector,callback){
var checker = window.setInterval(function() {
//if one or more elements have been yielded by jquery
//using this selector
if ($(jquery_selector).length) {
//stop checking for the existence of this element
clearInterval(checker);
//call the passed in function via the parameter above
callback();
}}, 200); //I usually check 5 times per second
}
//this is an example place in your code where you would like to
//start checking whether the target element exists
//I have used a class below, but you can use any jQuery selector
runAfterElementExists(".targetElementClass", function() {
//any code here will run after the element is found to exist
//and the interval has been deleted
});
The most straight-forward is to directly invoke the callback after creating the element :)
you can try this code
$('body').on('click', '#btn', function() {
$($('<div>').text('NewDive').appendTo("#old")).fadeOut(0).fadeIn(1000);
})
#old > div{
width: 100px;
background: red;
color: white;
height: 20px;
font: 12px;
padding-left: 4px;
line-height: 20px;
margin: 3px;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Test</title>
<link rel="stylesheet" href="./index.css">
</head>
<body>
<div>
<!-- Button trigger modal -->
<button type="button" id="btn">Create Div</button>
<div id="old">
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</body>
</html>
You may want to look into jQuery live events. You attach an event handler to a selector that either matches now or after additional elements are created in your DOM.
So if you have a <ul>
and you dynamically create new <li>
items, in your $(document).ready()
you can wire up a selector to an event handler so that all of your <li>
elements will be wired for that event.
Here's a jsFiddle sample that demos live
.
Hope this helps.
check out .live() its best after the element created,,
$('.clickme').live('click', function() {
// Live handler called.
});
And then later add a new element:
$('body').append('<div class="clickme">Another target</div>');
old thread, but in my case i had a situation with a big append-tree, and i wanted to do some initialization in-line so to speak, and did the following:
$("<div>").append(
...
$("<div>").foo(...).bar(...).etc(...).each(function(){
// init code to run after chain of init functions called
})
...
)