8

I am concerned about memory leaks in my application as I use jquery's html() method a lot to replace content in the the DOM. I just want to make sure that not of these event listeners are going to be hanging around in browser memory.

I have searched the jquery docs with no clear answer. Does anyone know?

Thanks guys!

wilsonpage
  • 17,341
  • 23
  • 103
  • 147

2 Answers2

5

Yes they are.

If you use jQuerys .html() it will take care of you. Looking into the jQuery source, this line is getting called:

jQuery.cleanData( this[i].getElementsByTagName("*") );

which effectively cleans up all data and events. This of course won't work if you're overwritting a DOMnodes innerHTML property explicitly.

jAndy
  • 231,737
  • 57
  • 305
  • 359
1

It seems using bind in jQuery, you can have more control over the events and handlers such as in this example from http://api.jquery.com/unbind/

var myHandlers = {};    

myHandlers.handler = function() {
    alert('The quick brown fox jumps over the lazy dog.');
};
$('#foo').bind('click', handler);
$('#foo').unbind('click', handler);

delete(myHandlers.handler);

But I don't know if that is possible to control with the normal jQuery syntax of $('a').click() since all that is returned is a jQuery object and no references to the handlers or events.

There is related discussion to this question here on stack overflow:

javascript memory leaks

Community
  • 1
  • 1
Tom Gruner
  • 9,635
  • 1
  • 20
  • 26