2011-10-08 2 views
2

Après avoir cliqué sur le lien, Click Me, la page défile vers le haut. Je ne veux pas ça. Comment peut-il le réparer?Empêche le défilement de la page après un clic?

Exemple:http://jsfiddle.net/Y6Y3Z/

barre de défilement:

enter image description here

function myalert() { 
     var result = true; 
     //var hide = $('.alert').fadeOut(100); 
     //var css = $('#appriseOverlay').css('display','none'); 
     var $alertDiv = $('<div class="alert">Are you sure you want to delete this item?<div class="clear"></div><button class="ok">no</button><button class="cancel">yes</button></div>'); 
     var link = this; 
     $('body').append($alertDiv); 
     $('.ok').click(function() { 
      $('.alert').fadeOut(100); 
      $('#appriseOverlay').css('display', 'none'); 
      callback(true, link); 
     }); 
     $('.cancel').click(function() { 
      $('.alert').fadeOut(100); 
      $('#appriseOverlay').css('display', 'none'); 
      callback(false, link); 
     }); 
     $alertDiv.fadeIn(100); 
     $('#appriseOverlay').css('display', 'block'); 
     return result; 
    }; 
$('.click').click(myalert); 
    function callback(result, link) { 
     // 
     if(result){ 
     } 
    } 

Répondre

8

La raison pour laquelle il va en haut de la page est parce que votre balise d'ancrage a un symbole dièse comme le href. La syntaxe de hachage vous permet de faire référence à une ancre nommée dans le document, le lien vous conduisant à cet endroit dans le document. L'action par défaut pour une balise d'ancrage lorsque vous cliquez dessus et que l'href fait référence à une ancre nommée qui n'existe pas est d'aller en haut de la page. Pour éviter cela, annulez l'action par défaut en renvoyant false du gestionnaire ou en utilisant preventDefault sur l'événement.

function myalert(e) { 
    e.preventDefault(); // <-- prevent the default action 

    ... 

    return false; // <-- alternative way to prevent the default action. 
}; 
+0

fonctionne pas 'preventDefault' dans mon code. que fais-je? –

+0

@EmmyCharles - mis à jour mon exemple – tvanfosson

+1

N'utilisez pas 'return false;' sauf si vous avez l'intention d'arrêter le bouillonnement d'un événement. Voir la réponse par @rodneyrehm à la place. – Sparky

4

Il vous suffit de changer le "#" pour "javascript: void (0)" sur le code HTML:

<a href="javascript:void(0)" class="click">Click Me</a> 

une autre solution est d'ajouter un "/" après le "#":

<a href="#/" class="click">Click Me</a> 
+2

OMG Je t'aime. Que/ROCKS! Je viens de dire à 5 autres développeurs et Gilberto, vous avez maintenant 3 sociétés de développement embrassant vos pieds en ce moment ^^ –

+0

ou vous pouvez simplement supprimer l'attribut href à partir de là. les deux vont travailler –

Questions connexes