Javascript (Jquery) Loop не работает - PullRequest
2 голосов
/ 29 февраля 2012

это мой первый пост на форуме.Здесь у меня есть JavaScript, пытаясь зациклить, и установить каждый элемент в качестве активного класса, затем подождите, удалите класс и добавьте его в следующий элемент.Моя проблема в том, что он делает первый, потом не более ...

var i = 1;

function myLoop() {
    setTimeout(function() {
        var i = 1;
        var j = (i - 1);

        $("#nH" + j).removeClass("active");
        $("#nH" + i).addClass("active");

        i++;
        if (i < 5) {
            myLoop();
        }
    }, 3000)
}

myLoop();​

Ответы [ 4 ]

3 голосов
/ 29 февраля 2012

удалить var i = 1; до var j = (i - 1); и добавить сюда

  if (i < 5) {
     i=1;
     myLoop(); 

  } 
1 голос
/ 29 февраля 2012

Я полагаю, это потому, что вы присваиваете i равным 1, и поэтому он снова и снова удаляет класс одного и того же элемента.Так что это на самом деле вызывается несколько раз, но вы не понимаете, так как эффект тот же.Проблема в вашей логике с переменными i и j.Попробуйте это.

var i = 1;

function myLoop() {
    setTimeout(function() {

        var j = (i - 1);

        $("#nH" + j).removeClass("active");
        $("#nH" + i).addClass("active");

        i++;
        if (i==5)
           i=1;
        if (i < 5) {
            myLoop();
        }
    }, 3000)
}

myLoop();​
0 голосов
/ 29 февраля 2012

Вот решение без использования цикла и глобальной переменной. Пример .

setInterval((function(min, max){
    var i = min;
    return function() {
        $("#nH"+i).addClass("active");
        $("#nH"+(i===min ? max : i-1)).removeClass("active");
        if (++i > max ) i = min;
    }
})(0, 4), 1000);
0 голосов
/ 29 февраля 2012

, потому что вам нужно снова вызвать setTimeout в вашем цикле

var i = 1;                    

function myLoop () {       

    var j = (i-1);

$("#nH" + j).removeClass("active");
$("#nH" + i).addClass("active");

    i++;
  if (i < 5) {        
     return setTimeout(myLoop,3000); /// <- HERE       
  }                   
}

setTimeout(myLoop,3000); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...