JQuery attaches an event handler function to all matching elements, even if this element is added later.
This method is basically a variant of the. bind () method. When. bind () is used, an event processing function will be appended to the element matched by the selector, and no elements will be added later. Therefore, you need to use. bind () again. For example:
<body><div class="clickme">Click here</div></body>
You can bind a simple click event to this element:
$('.clickme').bind('click', function() {alert("Bound handler called.");});
Clickme layer: Click my
When an element is clicked, a warning box is displayed. Then, imagine that another element was added.
$('body').append('<div class="clickme">Another target</div>');
Although this new element can also match the selector ". clickme", clicking this element will not have any effect because it is added after. bind () is called .. Live () provides a method for this situation. If we bind a click event like this:
$('.clickme').live('click', function() {alert("Live handler called."); });
Add a new div
Then, click the new element to trigger the event processing function.
Event Delegate
. The live () method is effective for an element that has not been added to the DOM because event delegation is used: event Handlers bound to the ancestor element can respond to events triggered on future generations. The event handler passed to. live () is not bound to an element. Instead, it serves as a special event handler and binds it to the root node of the DOM tree. In our example, when a new element is clicked, the following steps are taken in sequence:
- Generate a click event and pass it to div for processing
- Since no event handler function is directly bound to the div, the event bubbles to the DOM tree.
- Events are continuously bubbling until the root node of the DOM tree. By default, this special event handler function is bound to it.
- Execute the special click event processing function bound by. live.
- The event handler first checks the target of the event object to determine whether to continue. This test is performed by checking whether matching elements can be found in condition (event.tar get). closest ('. clickme.
- If matched elements are found, the original event handler is called.
Because the test is performed in step 5 of the preceding step only when an event occurs, the element added at any time can respond to the event.
Additional instructions
. Live () is useful, but it cannot simply replace. bind () in any situation due to its special implementation method (). The main differences are:
- In jQuery 1.4, the. live () method supports custom events and all JavaScript events. In jQuery 1.4.1, the focus and blue events are even supported (ing to focusin and focusout that are more appropriate and can be bubbling ). In addition, hover (mapped to "mouseenter mouseleave") is also supported in jQuery 1.4.1 "). However, in jQuery 1.3.x, only JavaScript events and custom events are supported: click, dblclick, keydown, keypress, keyup, mousedown, mousemove, mouseout, mouseover, and mouseup.
- . Live () does not fully support elements found through DOM traversal. Instead, the. live () method should always be used directly after a selector, as mentioned in the previous example.
- When an event processing function is bound with. live (), to stop executing other event processing functions, this function must return false. Only. stopPropagation () can be called.
Refer to the. bind () method to obtain