2010-10-29 6 views
1

Je voudrais savoir s'il existe un moyen de désactiver la recharge de la page avec jQuery? Par exemple, lorsque vous êtes sur la page À propos de, l'état actuel de la page À propos de ne permet pas aux utilisateurs de recharger la page s'ils cliquent de nouveau sur le lien. Donc, si vous avez une sorte d'animation, elle ne recommencera pas.Arrêt de la rechargement de la page actuelle

Si quelqu'un peut me prêter main forte, je l'apprécierai grandement.

Merci,

C'est ce que j'ai jusqu'à présent:

$(function() { 
    $page = jQuery.url.attr("file"); 
    if (!$page) { 
     $page = 'index.html'; 
    } 
    $('ul.navigation li a').each(function() { 
     var $href = $(this).attr('href'); 
     if (($href == $page) || ($href == '')) { 
      $(this).addClass('current'); 
     } else { 
      $(this).removeClass('current'); 
     } 
    }); 
}); 
+0

Veuillez placer votre code dans des blocs de code lorsque vous posez une question. –

+0

Vous pouvez bien sûr empêcher les liens d'être utilisables, mais vous ne pouvez rien faire pour empêcher un utilisateur d'actualiser la page ou de ressaisir l'URL pour recharger la page. Vous voudrez peut-être réfléchir à ce que vous essayez d'accomplir. – Ender

Répondre

0

Vous devez attraper l'événement clic et l'annuler. Voir la partie I ajouté entre mes commentaires ci-dessous:

$(function(){ 
$page = jQuery.url.attr("file"); 
if(!$page) { 
    $page = 'index.html'; 
} 
$('ul.navigation li a').each(function(){ 
    var $href = $(this).attr('href'); 
    if (($href == $page) || ($href == '')) { 
    $(this).addClass('current'); 

    /** ADDED BELOW **/ 
    $(this).click(function(event) { 
    event.preventDefault(); 
    event.stopPropagation(); 
    }); 
    /** ADDED ABOVE **/ 

    } else { 
    $(this).removeClass('current'); 
    } 
}); 
}); 
+0

Notez que "event.preventDefault()" arrête le clic de rechargement de la page et "event.stopPropagation()" empêche l'événement de bouillonner vers d'autres gestionnaires d'événements. –

+0

De même, en règle générale, vous ne devriez probablement pas nommer vos variables en commençant par un signe dollar, sauf si vous avez une bonne raison de le faire (par exemple, si la variable nommée est un objet qui s'étend jquery). Vos chaînes simples ci-dessus nommées "$ page" et "$ href" seraient probablement mieux appelées simplement "page" et "href". –

+0

Merci encore pour votre aide et la prochaine fois que j'ai une question je vais m'assurer que je mets mon code dans des blocs de code et nomme mes variables. – Kmack

0

Vous pouvez désactiver le lien en remplaçant $ (this) .addClass ('courant') avec:

$(this).addClass('current').find("a").click(function() { 
    return false;      
}) 

Cela a fonctionné pour moi le passé, mais je viens de voir la mise à jour de Ben et je suis intéressé si le mien et ses réponses seront à la fois travailler ou si le mien est défectueux? Est-ce que event.preventDefault(); et event.stopPropagation() la meilleure option?

+0

En matière de style, les gens préfèrent prévenirDéfaut plutôt que de retourner faux. Retourner des fausses œuvres, pour des raisons archaïques, mais c'est en quelque sorte un hack. Voir cet article pour une discussion: http://stackoverflow.com/questions/1357118/javascript-event-preventdefault-vs-return-false –

0

Que diriez-vous d'ajouter dynamiquement un hachage au lien de la page actuelle? Cliquer sur un lien avec un hash dans l'URL ne rechargera pas la page. (L'élément DOM a une propriété nommée "hash" qui peut être utilisée pour cela.)

Questions connexes