Issue
I did everything I could to make it happen, but without success.
The problem is that I create an element on runtime then bind a function to the element like the following code:
$(document).ready(function() {
$('.rem').click(function() {
$("body").append('<a id="runtime" href="javascript:void(0);">runtime</a>');
});
$('#runtime').bind('click', func_name());
});
//End of doc
function func_name() {
alert('I got it!');
}
In the HTML code I have a label like below:
<div id="body">
<label class="rem">click me</label>
</div>
My second attempt
$(document).ready(function() {
$('.rem').click(function() {
$("body").append('<a id="runtime" href="javascript:void(0);">runtime</a>');
});
$('#runtime').bind('click',function() {
alert($(this).text());
});
});
//End of doc
HTML code:
<div id="body">
<label class="rem">click me</label>
</div>
Solution
Change
$('#runtime').bind('click',func_name());
to
$('#runtime').live('click',func_name);
or (as of jQuery 1.7):
$('#runtime').on('click',func_name);
Two things to note:
- I changed
func_name()
tofunc_name
. You don’t want to call the function when you bind the handler – you just want to reference it. - Calling
bind
won’t do you any good, because#runtime
doesn’t exist until after you’ve clicked.rem
. That’s why you need eitherlive
oron
(depending upon your jQuery version).
And just for good measure: here’s a good reference on why you should be using jQuery.on
anyway.
Answered By – Chris Tonkinson
Answer Checked By – Timothy Miller (AngularFixing Admin)