jQuery bind event does not work at all

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:

  1. I changed func_name() to func_name. You don’t want to call the function when you bind the handler – you just want to reference it.
  2. Calling bind won’t do you any good, because #runtime doesn’t exist until after you’ve clicked .rem. That’s why you need either live or on (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)

Leave a Reply

Your email address will not be published.