0 votes

Aidez-moi à diagnostiquer ce problème de boucle jQuery / de hachage de signet ?

Je rencontre quelques problèmes pour rendre mon jquery correctement 100% du temps - le code que j'utilise est situé ci-dessous. Son but est de "simuler" l'ambiance d'un forum à threads en masquant tout sauf le sujet des réponses - lorsqu'un sujet est cliqué, le 1er post est alors remplacé par la réponse.

Vous pouvez voir un exemple de son fonctionnement ici :

http://bulldogsworld.com/general-bulldog-chat/50-lbs-bulldog-one-shin-pic

Le problème est que le script ne fonctionne pas très bien lorsque les gens arrivent via un signet # dans l'URL, comme par exemple :

http://bulldogsworld.com/general-bulldog-chat/50-lbs-bulldog-one-shin-pic#comment-1627028

Plus précisément, le problème qui se produit est que pour une raison quelconque, tous les posts en dessous du point d'entrée du signet sont répliqués deux fois. Je n'arrive pas à comprendre pourquoi cela se produit - des idées ?

Je suis à bout sur celui-ci - Toute aide / conseils sera grandement appréciée !

function flip(comment) {
$('#first-post').replaceWith(comment.closest(".comment").clone().attr('id','first-post'));
$('#first-post').children('.forumthreadtitle').children('.comment-info').empty();
$('#first-post').find(':hidden').fadeIn('lentement');
$('html, body').animate({scrollTop:0}, 'rapide');
return false;
}

$(document).ready(
function(){ 

$('.submitted').each(function() {
$(this).clone().addClass('comment-info').appendTo($(this).siblings('.forumthreadtitle'));
if(!$(this).parent('#first-post').html()) {
    $('#first-post').children('span.taxonomy').clone().appendTo($(this));
    }
});

$('.display_mode').html('Afficher toutes les réponses');
expandedMode = false;
$('.display_mode').click(function() {
    if ( expandedMode  == false  ) {
        $('.forumthreadtitle').siblings().show(); 
        $(this).html('Réduire les réponses');
        expandedMode  = true;
        }
    else
        {
        $('.forumthreadtitle').siblings().hide();
        $(this).html('Afficher toutes les réponses');
        expandedMode = false; 
        }
    });

$('.forumthreadtitle').siblings().hide();

if(window.location.hash) {
        flip($(window.location.hash).nextAll().children('.forumthreadtitle').show());
        }

$('.forumthreadtitle').click(function() { 
    pageTracker._trackPageview("/comment?page=" + document.location.pathname);
    flip($(this)); 
    } );
});

1voto

Voyta Points 4503

Vous avez probablement besoin d'utiliser next() au lieu de nextAll() dans votre flip

flip($(window.location.hash).next().children('.forumthreadtitle').show());

nextAll() retourne tous les éléments après celui sélectionné, et ils sont tous passés à la fonction flip.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X