de l'événement.preventDefault() de travail dans Chrome, mais pas dans Firefox / IE
Je sais qu'il y a déjà beaucoup de questions sur ce sujet, mais j'ai lu beaucoup d'entre eux et encore ne pouvais pas obtenir mon script fonctionne ...
J'ai un très de base diaporama qui peut être vu ici : www.screations.net/wm (il y a 3 diaporamas, j'ai le même problème sur tous les 3 d'entre eux)
Voici le code que j'utilise pour la navigation :
<a href="#"><img src="images/arrow_right.png" class="nextSlide" onclick="nextSlide();"/></a>
<a href="#"><img src="images/arrow_left.png" class="prevSlide" onclick="prevSlide();"/></a>
Et le jQuery (simplifié) :
function nextSlide()
{
$('.slide').eq(0).fadeIn(fadeSpeed);
event.preventDefault();
}
function prevSlide()
{
$('.slide').eq(0).fadeOut(fadeSpeed);
event.preventDefault();
}
Maintenant cela fonctionne très bien sur Chrome, mais sur Firefox /IE, tandis que le script fonctionne toujours, il recharge la page. Comment puis-je résoudre ce problème s'il vous plaît ? :/
Merci
- Vous ne pouvez pas attendre de
event.preventDefault()
de travail si vous ne passez pas le cas dans la fonction... - ...et si vous ne vous attendez pas à un
event
paramètre à vos fonctions. - Si vous utilisez jQuery, pourquoi ne pas l'utiliser pour attacher les gestionnaires d'événements correctement (au lieu de inline attributs)?
- Le vrai mystère ici, c'est pourquoi ce code fonctionne dans Chrome, il ne devrait pas. Il a probablement à voir avec vous attacher les gestionnaires d'événements pour
img
des balises qui n'ont pas de valeurs par défaut.event
n'est pas global, il doit être passé dans le gestionnaire comme un paramètre.function nextSlide(event) { /* now event actually exists! */ }
. Comme d'autres l'ont mentionné l'aideonclick
est une mauvaise pratique, donner un id à laa
tag et utiliser jQuery pour joindre l'événement:<a id="next">
,jQuery('#next').click(nextSlide);
.
Vous devez vous connecter pour publier un commentaire.
En voyant le corps de la fonction, il y buble deux problèmes évidents
Vous n'avez pas passer
event
, donc lors de l'appel de cette fonction, JS suppose queevent
vient de portée mondiale. Deuxièmement, vous feriez habituellement voulez empêcher l'action par défaut avant de commencer à faire quelque chose, comme ceci:Et enfin, il ne fait pas trop de sens d'utiliser le JavaScript en ligne lorsque vous avez déjà inclus jquery.
Donc, j'avais à réécrire votre chose comme:
Vous ne pouvez pas attendre de l'événement afin d'être prévenus si vous n'avez pas le passer à la fonction.
Changer vos liens comme suit:
Ensuite, modifiez votre fonction comme suit:
onclick="nextSlide(e);"
n' pas de travail.event
identifiant devrait être disponible pour l'objet d'événement dans inline attribut code du gestionnaire. Vous pouvez utiliserfunction nextSlide(e) { e.preventDefault(); … }
de cours.Vous exécutez et vous avez besoin de passer l'événement dans la fonction.
Vous exécutez généralement de l'événement.preventDefault() avant de faire d'autres trucs, mais c'est pas 100% nécessaire.
event.preventDefault
juste besoin d'être appelé au sein de l'un des maîtres-chiens.img.slideNext
pas#slideNext