2010-03-29 4 views
2

Mon site est ici: http://treethink.comJquery removeClass ne fonctionne pas

Ce que je vais est un symbole de nouvelles sur la droite qui est à l'intérieur d'une fonction jquery. La fonction commence tout de suite et extrait le ticker de nouvelles, puis le rétracte comme il se doit. Lors d'une navigation, il ajoute une classe à la div, que la fonction vérifie ensuite pour voir si elle doit arrêter d'extraire/rétracter. Tout cela fonctionne très bien.

Le problème que je rencontre est qu'après avoir cliqué sur le bouton de fermeture (dans la fenêtre de contenu), removeClass ne fonctionnera pas. Cela signifie qu'il ne cesse de penser que la fenêtre est ouverte et que l'instruction conditionnelle à l'intérieur de la fonction ne l'autorisera pas à extraire et à se rétracter à nouveau. Avec une simple vérification firebug, cela montre que la classe n'est pas supprimée en période.

Ce n'est pas l'identifiant cboxClose qu'il ne trouve pas parce que j'ai essayé de changer cela en balises "a" en général et cela ne fonctionnerait toujours pas, donc c'est quelque chose à voir avec jQuery. Quelqu'un a également suggéré une alerte rapide() pour vérifier si le rappel fonctionne mais je ne suis pas sûr de ce que c'est.

Voici le code:

/* News Ticker */ 

    /* Initially hide all news items */ 

    $('#ticker1').hide(); 
    $('#ticker2').hide(); 
    $('#ticker3').hide(); 

    var randomNum = Math.floor(Math.random()*3); /* Pick random number */ 

    newsTicker(); 

    function newsTicker() { 

     if (!$("#ticker").hasClass("noTicker")) { 

      $("#ticker").oneTime(2000,function(i) { /* Do the first pull out once */ 

       $('div#ticker div:eq(' + randomNum + ')').show(); /* Select div with random number */ 

       $("#ticker").animate({right: "0"}, {duration: 800 }); /* Pull out ticker with random div */ 

      }); 

      $("#ticker").oneTime(15000,function(i) { /* Do the first retract once */ 

       $("#ticker").animate({right: "-450"}, {duration: 800}); /* Retract ticker */ 

       $("#ticker").oneTime(1000,function(i) { /* Afterwards */ 

        $('div#ticker div:eq(' + (randomNum) + ')').hide(); /* Hide that div */ 

       }); 

      }); 

      $("#ticker").everyTime(16500,function(i) { /* Everytime timer gets to certain point */ 

       /* Show next div */ 

       randomNum = (randomNum+1)%3; 

       $('div#ticker div:eq(' + (randomNum) + ')').show(); 

       $("#ticker").animate({right: "0"}, {duration: 800}); /* Pull out right away */ 


       $("#ticker").oneTime(15000,function(i) { /* Afterwards */ 

        $("#ticker").animate({right: "-450"}, {duration: 800});/* Retract ticker */ 

       }); 

       $("#ticker").oneTime(16000,function(i) { /* Afterwards */ 

        /* Hide all divs */ 

        $('#ticker1').hide(); 
        $('#ticker2').hide(); 
        $('#ticker3').hide(); 

       }); 

      }); 

     } else { 

      $("#ticker").animate({right: "-450"}, {duration: 800}); /* Retract ticker */ 

      $("#ticker").oneTime(1000,function(i) { /* Afterwards */ 

       $('div#ticker div:eq(' + (randomNum) + ')').hide(); /* Hide that div */ 

      }); 

      $("#ticker").stopTime(); 

     } 

    } 

    /* when nav item is clicked re-run news ticker function but give it new class to prevent activity */ 

    $("#nav li").click(function() { 

     $("#ticker").addClass("noTicker"); 

     newsTicker(); 

    }); 

    /* when close button is clicked re-run news ticker function but take away new class so activity can start again */ 

    $("#cboxClose").click(function() { 

     $("#ticker").removeClass("noTicker"); 

     newsTicker(); 

    }); 

Merci,

Wade

Répondre

1

La version du code sur votre site est différent de ce que vous avez copié ici.

La version sur le site en a:

$("a").click(function() { 

    $("#ticker").removeClass("noTicker"); 

    newsTicker(); 

}); 

au lieu de ce que vous avez copié ici:

$("#cboxClose").click(function() { 

    $("#ticker").removeClass("noTicker"); 

    newsTicker(); 

}); 

Je peux confirmer que le code du site en direct ne fonctionne pas (utilisé un Point d'arrêt de la console des développeurs Chrome à vérifier).

En outre, pensez à mettre à jour votre Jquery vers la version 1.4.2 la plus récente, cela ramassera tous les autres bogues qui affectent votre code.

+0

Je mis à jour le site, mais quel que soit il ne fonctionne pas vraiment. J'essaierai de mettre jQuery à jour, mais je ne suis pas sûr que ça va le casser, il y a des choses qui pourraient dépendre de versions spécifiques. –

+0

D'accord la mise à jour a bien fonctionné, n'a pas résolu le problème cependant. –

+0

Il semble que peu importe le lien que j'attache la removeClass à cela ne fonctionnera pas, j'ai essayé d'attacher une addClass là aussi, et cela ne fonctionnerait pas. Ce qui signifie que le problème n'est pas le lien et n'est pas le removeClass ... C'est autre chose. –

2

Puisqu'il s'agit d'un top résultat de recherche pour "jquery removeClass ne fonctionne pas", peut-être que je peux poster la solution la plus commune à ce genre de problème.

Ne faites pas ceci:

$('#selector').removeClass('.active'); 

Faites ceci:

$('#selector').removeClass('active');