Je ne sais pas trop si je ne l'utilise pas dans la bonne portée ou quoi, mais j'ai un script qui capture essentiellement un clic sur le lien et fait disparaître la page avant de passer à la page liée. Cependant, si le lien est un JavaScript onclick, le script échoue.
Voici mon code:
<script type="text/javascript">
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);
}
});
});
</script>
Comme vous pouvez le voir, j'essaie de vérifier si le lien a l'attribut onclick, puis d'appeler la fonction onclick si elle existe. Comment puis-je atteindre cet objectif?
Bien que Diodeus soit correct, vous devez encapsuler this
dans une collection jQuery avant d'utiliser attr()
(c'est une méthode d'une collection jQuery, pas d'un HTMLElement
), vous pouvez sautez tout aussi bien 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é (lorsqu'un document HTML se charge, les attributs sont généralement préchargés dans les propriétés, les attributs on_______
Étant préchargés en tant que méthodes. Notez également que j'ai utilisé this.onclick.call()
plutôt que eval()
, définissant les this
corrects pour les méthodes onclick
et garantissant l'accès à l'objet événement comme argument.
Utilisez: $(this).attr
au lieu de this.attr
Cela le force dans le contexte de jQuery.