views:

97

answers:

5

I'm populating a list by cloning elements into it. Then I change attrs to make each item unique. They need to call a function on click, so I'm wondering if it's more efficient to use new_element.click(func); or new_element.attr('onlick','func();');

+3  A: 

onclick has a number of limitations, including cluttering the DOM and only allowing one function at a time. So you should use click. See Quirks Mode for more information.

Matthew Flaschen
A: 

Since you are using jQuery then make it this way

new_element.click(function(){
    // your code
});

or you can bind the click event handler like

new_element.bind("click", function(){
    // your code
});
rahul
Thanks, but the function already exists and is called from a few places. An anonymous function would not be appropriate for me.
Jake
A: 

Any difference in performance between the two is most likely going to be negligible. You should use the one that reads better, and that's element.click. (Plus, onclick has many disadvantages, as @Matthew Flaschen mentioned.)

musicfreak
+1  A: 

Directly referencing the function will be more efficient than having to interpret a string.

The lowest touch way of doing this, however, is this way:

$(links_selector).live('click', func);

links_selector will presumably be something like ul.listClass a.actionClass. This will not require anything to be done when new list elements get added.

wombleton
+3  A: 
new_element.attr('onclick','func();');

Is:

  • inefficient (needlessly creating a new inline function from a string, that does nothing except call func and lose the this reference);

  • aggravating to put any complex code in, since it all has to be JS string escaped;

  • broken in IE, due to bugs in setAttribute.

Avoid. click()/bind('click') is there for a reason.

bobince