Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When using jQuery on(), why use (document) vs. the element itself?

I'd like a jQuery expert in their own words to explain why the $(document) identifier is recommended by others for jQuery's on() statement vs just using an element itself

Example 1: Why is using $(document) here better then Example #2?

$(document).on("click", ".areaCodeList a", function(){
    // do stuff
});

Example 2: Why is using the element this way considering not good practice compared to Example 1?

$(".areaCodeList a").on("click", function(){
    // do stuff
});
like image 474
Downpour046 Avatar asked Feb 23 '12 18:02

Downpour046


People also ask

What is the purpose of on () method in jQuery?

The on() is an inbuilt method in jQuery which is used to attach one or more event handlers for the selected elements and child elements in the DOM tree.

When we should use $( this in jQuery?

The value of this inside a click event is a DOM element (the one that was clicked). Using $(this) converts it to a jQuery object. DOM elements do not have a hide() methods, but jQuery adds that and many other methods you can then call.

Why we use jQuery to wire up events?

jQuery makes it straightforward to set up event-driven responses on page elements. These events are often triggered by the end user's interaction with the page, such as when text is entered into a form element or the mouse pointer is moved.

Which jQuery keyword should be used to bind an event to an element?

bind() method is used for attaching an event handler directly to elements. Handlers are attached to the currently selected elements in the jQuery object, so those elements must exist at the point the call to . bind() occurs.


2 Answers

Both of those are valid.

The former works for dynamically added elements. You use document because you're delegating events on children of the document object, so events bubble up to the document level. It's also more convenient to select the closest parent you can (and the parent must exist on the page at load).

The latter still works, and is a preferred way to simply bind events to specific elements.

I personally don't recommend delegating through the document object, but rather the closest parent that exists on page load.

Here are the docs for on().

like image 158
Purag Avatar answered Oct 07 '22 19:10

Purag


This is not true.

Those two lines do totally two different things.

The first one is a delegate event with the selector of ".areaCodeList a" while the second line is an event attached to the ".areaCodeList a" elements.

A delegate event will fire to every ".areaCodeList a" element although it was in the DOM when that line executed.

Anyway, attaching delegate events to the document isn't recommended at all. as written in the live docs:

Since all .live() events are attached at the document element, events take the longest and slowest possible path before they are handled

Please read the on docs:

Event handlers are bound only to the currently selected elements; they must exist on the page at the time your code makes the call to .on(). To ensure the elements are present and can be selected, perform event binding inside a document ready handler for elements that are in the HTML markup on the page. If new HTML is being injected into the page, select the elements and attach event handlers after the new HTML is placed into the page. Or, use delegated events to attach an event handler, as described next.

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

like image 20
gdoron is supporting Monica Avatar answered Oct 07 '22 19:10

gdoron is supporting Monica