Jquery removeClass не работает - PullRequest
2 голосов
/ 29 марта 2010

Мой сайт здесь: http://treethink.com

То, что я собираюсь сделать, это тикер новостей справа, который находится внутри функции jquery. Функция запускается сразу и извлекает тикер новостей, а затем убирает его, как и должно. При навигации он добавляет класс в div, который затем проверяет функция, чтобы увидеть, следует ли прекратить извлекать / убирать. Это все прекрасно работает.

Проблема, с которой я столкнулся, заключается в том, что после нажатия кнопки закрытия (в окне содержимого), removeClass не будет работать. Это означает, что он продолжает думать, что окно открыто, и поэтому условный оператор внутри функции не позволяет ему извлекать и возвращать снова. С простой проверкой firebug это показывает, что класс не удаляется точка.

Это не идентификатор cboxClose, который он не находит, потому что я пытался изменить его на просто теги "a" в целом, и он все равно не будет работать, так что это определенно связано с jQuery. Кто-то также предложил быстрое оповещение (), чтобы проверить, работает ли обратный вызов, но я не уверен, что это такое.

Вот код:

/* 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();

    });

Спасибо

Wade

Ответы [ 2 ]

2 голосов
/ 07 июня 2013

Поскольку это лучший результат поиска для "jquery removeClass не работает", возможно, я могу опубликовать наиболее распространенное решение для такого рода проблем.

Не делайте этого:

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

Сделайте это:

$('#selector').removeClass('active');
1 голос
/ 29 марта 2010

Версия кода на вашем сайте отличается от того, что вы скопировали здесь.

Версия на живом сайте имеет:

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

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

    newsTicker();

});

вместо того, что вы скопировали здесь:

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

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

    newsTicker();

});

Я могу подтвердить, что живой код сайта не запускается (для проверки использовалась точка останова Chrome Developer Console).

Как еще один вариант, рассмотрите возможность обновления Jquery до последней версии 1.4.2, это позволит выявить все другие ошибки, которые влияют на ваш код.

...