I have been through this issue myself. Newly loaded html via Ajax needs to be connected to the event handlers, even if it is replacing existing DOM elements. To do that you have to include in your AJAX result to establish a handler for all event-sensitive elements that are being rendered.
So for example, if your AJAX call returns
$ajaxresult = '<button class="bookbtn" id="bookbtn" type="button" >Book</button>';
You need to add
$ajaxresult .= '<script>$("#bookbtn").on("click",function(){doit($(this))});</script>'."\n";
However in researching this issue just now, I read the following in http://api.jquery.com/on/ :
Event handlers are bound only to the currently selected elements; they
must exist at the time your code makes the call to .on(). To ensure
the elements are present and can be selected, place scripts after the
elements in the HTML markup or perform event binding inside a document
ready handler. Alternatively, use delegated events to attach event
handlers.
Delegated events have the advantage that they can process events from
descendant elements that are added to the document at a later time. By
picking an element that is guaranteed to be present at the time the
delegated event handler is attached, you can use delegated events to
avoid the need to frequently attach and remove event handlers. This
element could be the container element of a view in a
Model-View-Controller design, for example, or document if the event
handler wants to monitor all bubbling events in the document. The
document element is available in the head of the document before
loading any other HTML, so it is safe to attach events there without
waiting for the document to be ready.
In addition to their ability to handle events on descendant elements
not yet created, another advantage of delegated events is their
potential for much lower overhead when many elements must be
monitored. On a data table with 1,000 rows in its tbody, this example
attaches a handler to 1,000 elements: ...