Je remplis une liste en y clonant des éléments. Ensuite, je change d'attr pour rendre chaque élément unique. Ils ont besoin d'appeler une fonction sur un clic, alors je me demande s'il est plus efficace d'utiliser new_element.click(func);
ou new_element.attr('onlick','func();');
jQuery: est-ce que element.click (func) ou element.attr ('onclick', 'func()') est plus efficace?
Répondre
new_element.attr('onclick','func();');
est:
inefficace (créer inutilement une nouvelle fonction en ligne à partir d'une chaîne, qui ne fait rien, sauf func d'appel et de perdre la référence
this
);aggravation de mettre du code complexe, car tout doit être JS chaîne échappée;
cassé dans IE, en raison de bugs dans
setAttribute
.
Éviter. click()
/bind('click')
est là pour une raison.
onclick a un certain nombre de limitations, y compris encombrent les DOM et en permettant qu'une seule fonction à la fois. Donc, vous devriez utiliser le clic. Voir Quirks Mode pour plus d'informations.
Puisque vous utilisez jQuery permettent alors de cette façon
new_element.click(function(){
// your code
});
ou vous pouvez lier le gestionnaire d'événement click comme
new_element.bind("click", function(){
// your code
});
Merci, mais la fonction existe déjà et est appelée à partir de quelques endroits. Une fonction anonyme ne serait pas appropriée pour moi. – Jake
Toute différence de performance entre les deux va plus susceptibles d'être négligeable. Vous devriez utiliser celui qui lit le mieux, et c'est element.click
. (De plus, onclick
présente de nombreux inconvénients, comme @Matthew Flaschen mentionné.)
directement référence à la fonction sera plus efficace que d'avoir à interpréter une chaîne.
Le plus bas moyen tactile de faire cela, cependant, est de cette façon:
$(links_selector).live('click', func);
links_selector
sera probablement quelque chose comme ul.listClass a.actionClass
. Cela ne nécessitera rien lors de l'ajout de nouveaux éléments de liste.
Et il est sujet aux fautes de frappe ('onclikc') –