 <p>The problem is that you are binding your event handler to the element before it exists because it is still being ajax'ed.</p> <p>Try including a callback function in <code>Guardian_news</code> and executing it once the ajax is complete - then bind your events within that callback.</p> <p>EDIT: something like this:</p> <pre><code>function Guardian_news(filter, selector, div, callback) { this.path = 'fullwindow1.html'; this.filter = filter; this.selector = selector; this.populate = function(){ $.get(this.path, function(templates){ var template = $(templates).filter(filter).html(); $(selector).html(Mustache.render(template)); callback(); // Call our callback here once the ajax is complete and the template is rendered }); } } $(document).ready(function(){ var menu; var callback = function () { $('#science').click(function(){ alert('url accessed'); }); } menu = new Guardian_news('#navigationBar', '#menu', callback); menu.populate(); }); </code></pre>