Éviter de la fenêtre de sauter de haut en cliquant #-liens
J'ai une page avec quelques questions et réponses, les réponses sont réduits par défaut. Lorsqu'ils cliquent sur la question que je développez le caché réponse-div. Le problème est que lorsque je clique sur ces questions, la fenêtre de sauter vers le haut de l'écran. Ce n'est pas un énorme problème, mais je trouve que c'est gênant, parce que j'ai faites défiler jusqu'à nouveau la question.
Les liens ressemble simplement à ceci:
<a href="#" id="myID">Myquestion</a>
Et j'ai utilisé jQuery et .click
comme écouteur d'événement.
Existe-il des moyens simples pour éviter cela, ou dois-je utiliser .scroll
et de trouver les coordonnées de la question? Je préfère l'éviter.
EDIT: je sais que je peux utiliser des ancres pour ce faire, mais je voudrais éviter tout saut de l'écran à tous.
- Vous marquez la réponse est correcte, et ne pas copier&coller à l'intérieur de votre question. Si vous avez un diff solution, vous publiez en tant que réponse.
- Double Possible de Comment empêcher un clic sur un '#' lien de sauter vers le haut de la page en jQuery
Vous devez vous connecter pour publier un commentaire.
Vous devez ajouter
preventDefault()
à votre gestionnaire de clic. Cela va arrêter le navigateur de l'exécution de son propre lien de gestionnaire et va exécuter le code que vous spécifiez.Exemple:
if(e.preventDefault){ e.preventDefault()} else{e.stop()};
Grâce. L'affaire est close.preventDefault()
devrait fonctionner dans tous les navigateurs si vous êtes à l'aide de jQuery. Vous pouvez aussi simplement return false à partir de votre gestionnaire d'événement.N'utilisez pas de balises pour les tâches qui ne sont pas reliées à la navigation. Il n'est pas balisage sémantique, et de ne pas dégrader gracieusement. Utilisez les boutons de la place.
Vous pouvez le faire très simple:
Juste ajouter
!
à la fin de votrehref
:L'alternative jQuery moyens sont:
e.preventDefault()
seul ne fonctionne pas dans les anciennes versions d'IE.En fait, la meilleure façon de le faire est de supprimer l'attribut href de votre balise d'ancrage. Grâce à HTML5, balises d'ancrage n'avez pas besoin d'inclure des attributs href être sémantique.
Donc
au lieu de
Cela fonctionne dans IE8+, Chrome et Firefox. Remarque :le lien de styles css ne s'appliquent pas à l'ancrage des balises qui ne sont pas des attributs href.
Si vous avez besoin de l'attribut href et/ou de compatibilité IE7, puis
est probablement la meilleure façon d'aller.
Vous êtes à la recherche pour
event.preventDefault
(voir jQuery API).Exemple avec de belles défilement pour répondre contenu:
Je suis utilisé jQuery scrollTo plugin.
À l'intérieur de votre fonction de:
Ressemblera à quelque chose comme:
Changer cela (n'oubliez pas les param e à l'intérieur
function(e)
:$('body').on('click', '[href^=#]', function (e) {
e.preventDefault()
});
si le sélecteur ex.."corps" est-il lors de la première de rendre, puis utilisez l'une de sélecteur .. id ... pour cible le général de jQuery (comme des 1.8.2) itérer sur. le "gestionnaire d'invoquer une méthode dite de "lier", qui est utilisé pour le nouvellement ajouté de contenu pour les DOM",. À l'aide de la "[href^=#] va sélectionner tout href qui sont dans la section tag, mais vous pouvez remplacer l'article avec tout ou rien, et il s'applique à une annulation de l'événement click. Cette technique est idéal pour créer dynamiquement des contenus vers les DOM
Si vous ajoutez un "\" pour le "#" ça va l'empêcher d'aller vers le haut.
HTML:
JavaScript: