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: ...