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.