Ajax and events
Suppose we wanted to allow each dictionary term name to control the display of the definition that follows; clicking on the term name would show or hide the associated definition. With the techniques we have seen so far, this should be pretty straightforward:
$(() => { $('h3.term') .click((e) => { $(e.target) .siblings('.definition') .slideToggle(); }); });
Listing 6.16
When a term is clicked on, this code finds siblings of the element that have a class of definition
, and slides them up or down as appropriate.
All seems in order, but a click does nothing with this code. Unfortunately, the terms have not yet been added to the document when we attach the click
handlers. Even if we managed to attach click
handlers to these items, once we clicked on a different letter the handlers would no longer be attached.
This is a common problem with areas of a page populated by Ajax. A popular solution is to rebind handlers each time the page area is refreshed...