Question

Liens hypertextes jQuery - valeur href ? texte 1]

Je rencontre un problème avec jquery et un événement de clic attaché à un élément d'ancrage.[1]: Liens hypertextes jQuery - valeur href ? "Cette" question SO semble être un doublon et la réponse acceptée ne semble pas résoudre le problème.Désolé si c'est une mauvaise étiquette.

Dans ma fonction .ready() j'ai :

jQuery("#id_of_anchor").click(function(event) { //start function when any update link is clicked
        Function_that_does_ajax();
        });

et mon ancre ressemble à ceci :

<a href="#" id="id_of_anchor"> link text </a> 

mais lorsque l'on clique sur le lien, la fonction ajax est exécutée comme souhaité, mais le navigateur défile vers le haut de la page.pas bon.

J'ai essayé d'ajouter :

event.preventDefault(); 

avant d'appeler ma fonction qui fait l'ajax, mais ça n'aide pas.Qu'est-ce que je rate?

Clarification

J'ai utilisé toutes les combinaisons de

return false;
event.preventDefault(); 
event.stopPropagation();

avant et après mon appel à ma fonction js ajax.Il défile toujours vers le haut.

Était-ce utile?

La solution

Cela devrait fonctionner, pouvez-vous préciser ce que vous entendez par « avant »? Est-ce que vous faites cela?

jQuery("#id_of_anchor").click(function(event) {
    event.preventDefault();
    Function_that_does_ajax();
});

Parce que devrait fonctionner dans le sens que si cela ne fonctionne pas que vous faites quelque chose de mal et nous avions besoin de voir plus de code. Cependant, par souci d'exhaustivité, vous pouvez également essayer ceci:

jQuery("#id_of_anchor").click(function() {
    Function_that_does_ajax();
    return false;
});

EDIT

Voici un exemple de ce travail .

Les deux liens utilisent ce code:

$('#test').click(function(event) {
    event.preventDefault();
    $(this).html('and I didnt scroll to the top!');
});

$('#test2').click(function(event) {
    $(this).html('and I didnt scroll to the top!');
    return false;
});

Et comme vous pouvez le voir, ils travaillent très bien.

Autres conseils

vous pouvez utiliser javascript: void (0); dans la propriété href.

Tilal dit ci-dessus:

<a id="id_of_anchor" href="javascript:void(0)" />

maintient la balise d'ancrage regardant à droite, vous permet d'assigner des gestionnaires de cliquer pour avec javascript, et ne défile pas. Nous utilisons intensivement juste pour cette raison.

Cette question est davantage un exercice de débogage puisqu'il est indiqué que vous utilisez les fonctions correctes du Objet événement jQuery.

Dans un gestionnaire d'événements jQuery, vous pouvez effectuer l'une ou les deux opérations de base :

1.Empêchez le comportement par défaut de l'élément (Le A HREF="#", dans votre cas) :

jQuery("#id_of_anchor").click(function(evt) { 
  // ...
  evt.preventDefault(); // assuming your handler has "evt" as the first parameter
  return false;
}

2.Empêchez l'événement de se propager aux gestionnaires d'événements sur les éléments HTML environnants :

jQuery("#id_of_anchor").click(function(evt) { 
  // ...
  evt.stopPropagation(); // assuming your handler has "evt" as the first parameter
}

Puisque vous n'obtenez pas le comportement attendu, vous devez supprimer temporairement l'appel ajax, le remplacer par un code inoffensif comme définir une valeur de formulaire, ou -frémir- alerte("OK") et testez si vous faites toujours défiler vers le haut.

$("#id_of_anchor").click(function(event) { 
  // ...
  return false;
}

juste perdre la balise

href="#"

Dans la balise html ... qui est ce qui provoque la page Web pour « sauter ».

<a id="id_of_anchor"> link text </a>

et rappelez-vous d'ajouter

cursor: pointer;

à la css de votre une sorte qu'il ressemble à un lien sur mouseover.

Bonne chance.

J'ai eu le même problème.

Je pense qu'il se produit lorsque vous liez l'événement avant d'ajouter l'élément au DOM.

Il m'a beaucoup aidé avec le code ci-dessous. Merci!

        $(document).ready(function() {
        $(".dropdown dt a").click(function(event) {
        event.preventDefault();
            $(".dropdown dd ul").toggle('slow');
        });           
        $(".dropdown dd ul li a").click(function(event) {
        event.preventDefault();
            $(".dropdown dd ul").hide();
        });
    });
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top