jQuery: this.attr () n’est pas une fonction?

Je ne suis pas tout à fait sûr de ne pas utiliser ceci dans la scope correcte ou quoi, mais j’ai un script qui capture un clic de lien et provoque la fermeture en fondu de la page avant de passer à la page liée. Cependant, si le lien est un JavaScript onclick , le script échoue.

Voici mon code:

 pageObj = { init: function(){ $("body").fadeTo("slow", 1); }, redirectPage: function(redirect){ window.location = redirect; }, linkLoad: function(location){ $("body").fadeOut(1000, this.redirectPage(location)); } }; $(document).ready(function() { pageObj.init(); $("a").click(function(e){ e.preventDefault(); if (this.attr('onclick') !== undefined) { eval(this.attr('onclick').val()); } else { var location = this.href; pageObj.linkLoad(location); } }); });  

Comme vous pouvez le constater, j’essaie de vérifier si le lien possède l’atsortingbut onclick , puis appelez la fonction onclick si elle existe. Comment puis-je atteindre cet objective?

Bien que Diodeus ait raison de dire que vous devez insérer this dans une collection jQuery avant d’utiliser attr() (c’est une méthode d’une collection jQuery et non d’un object HTMLElement ), vous pouvez également ignorer attr() .

 $("a").click(function(e){ var location; e.preventDefault(); if ($.isFunction(this.onclick)) { this.onclick.call(this, e); } else { location = this.href; pageObj.linkLoad(location); } }); 

Notez que j’ai utilisé la propriété (lors du chargement d’un document HTML, les atsortingbuts sont généralement préchargés dans des propriétés, les atsortingbuts on_______ étant préchargés en tant que méthodes. Notez également que j’ai utilisé this.onclick.call() plutôt que eval() , this pour les méthodes onclick , et en garantissant l’access à l’object événement sous forme d’argument.

Utilisez: $(this).attr au lieu de this.attr

Cela le force dans le contexte de jQuery.