Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between .on('click') vs .click()

Tags:

jquery

click

Is there any difference between the following code?

$('#whatever').on('click', function() {      /* your code here */ }); 

and

$('#whatever').click(function() {      /* your code here */ }); 
like image 587
bgcode Avatar asked Feb 03 '12 00:02

bgcode


People also ask

What is the difference between click and on click?

In click() it will be the object on which the handler is attached. In onclick() it would be a normal function call and this would be inherited from the calling context.

What is the difference between click and Onclick in angular?

The difference is that the first is an event listener, and the second is an event handler content attribute.

What is on click function?

Definition and Usage. The onclick event occurs when the user clicks on an element. In HTML: <element onclick="myScript">

What is Offclick?

off('click'). on('click',function(){}); It will simply remove any previous event handler attached to the event and create a new one. Follow this answer to receive notifications.


2 Answers

I think, the difference is in usage patterns.

I would prefer .on over .click because the former can use less memory and work for dynamically added elements.

Consider the following html:

<html>     <button id="add">Add new</button>     <div id="container">         <button class="alert">alert!</button>     </div> </html> 

where we add new buttons via

$("button#add").click(function() {     var html = "<button class='alert'>Alert!</button>";     $("button.alert:last").parent().append(html); }); 

and want "Alert!" to show an alert. We can use either "click" or "on" for that.


When we use click

$("button.alert").click(function() {     alert(1); }); 

with the above, a separate handler gets created for every single element that matches the selector. That means

  1. many matching elements would create many identical handlers and thus increase memory footprint
  2. dynamically added items won't have the handler - ie, in the above html the newly added "Alert!" buttons won't work unless you rebind the handler.

When we use .on

$("div#container").on('click', 'button.alert', function() {     alert(1); }); 

with the above, a single handler for all elements that match your selector, including the ones created dynamically.


...another reason to use .on

As Adrien commented below, another reason to use .on is namespaced events.

If you add a handler with .on("click", handler) you normally remove it with .off("click", handler) which will remove that very handler. Obviously this works only if you have a reference to the function, so what if you don't ? You use namespaces:

$("#element").on("click.someNamespace", function() { console.log("anonymous!"); }); 

with unbinding via

$("#element").off("click.someNamespace"); 
like image 185
andreister Avatar answered Oct 20 '22 05:10

andreister


Is there any difference between the following code?

No, there is no functional difference between the two code samples in your question. .click(fn) is a "shortcut method" for .on("click", fn). From the documentation for .on():

There are shorthand methods for some events such as .click() that can be used to attach or trigger event handlers. For a complete list of shorthand methods, see the events category.

Note that .on() differs from .click() in that it has the ability to create delegated event handlers by passing a selector parameter, whereas .click() does not. When .on() is called without a selector parameter, it behaves exactly the same as .click(). If you want event delegation, use .on().

like image 27
gilly3 Avatar answered Oct 20 '22 04:10

gilly3