Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Повторный вызов функции (https://javascript.ru/forum/misc/58755-povtornyjj-vyzov-funkcii.html)

rvsbox 08.10.2015 20:41

Повторный вызов функции
 
Привет.
Не получается вызвать функцию повторно, чтобы при каждом нажатии выводился массив globalArray по порядку с использованием метода setInterval(); Почему то выводится один раз.

http://jsfiddle.net/awosdsL6/1/

$(function() {
    var arr01 = ['a1', 'a2', 'a3', 'a4'],
    arr02 = ['b1', 'b2', 'b3', 'b4'],
    arr03 = ['c1', 'c2', 'c3', 'c4'],
    globalArray = [arr01, arr02, arr03];
    var i = 0, k = 0, n = 0;
 
    $("#next").click(function() {
        if (i < globalArray.length) {
            if (k < globalArray[n].length) {
                setInterval(function() {
                    $("#matrix").append(globalArray[n][k]);
                    k++;
                },200);
            }
        i++;
/*        } else {
            i = 0;
            if (i < globalArray.length) {
                if (k < globalArray[n].length) {
                    setInterval(function() {
                        $("#matrix").append(globalArray[n][k]);
                        k++;
                    },200);
                }
            i++;*/
        }
    });
});


Вот здесь все работает

http://jsfiddle.net/c3rggsot/

$(function() {
    var arr01 = ['a1', 'a2', 'a3', 'a4'],
    arr02 = ['b1', 'b2', 'b3', 'b4'],
    arr03 = ['c1', 'c2', 'c3', 'c4'],
    globalArray = [arr01, arr02, arr03];
    var i = 0;
 
    $("#next").click(function(){
        if (i < globalArray.length) {
            document.getElementById("info").innerHTML = globalArray[i];
            i++;
        } else {
            i = 0;
            document.getElementById("info").innerHTML = globalArray[i];
            i++;
        }
    });
});

рони 08.10.2015 20:52

Цитата:

Сообщение от rvsbox
с использованием метода setInterval();

лучше не убивать комп, попробуйте придумать алгоритм без setInterval();

рони 08.10.2015 21:27

rvsbox,
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  .my{
     font-size: 4em;
  }
  </style>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
$(function() {
    var arr01 = ["a1", "a2", "a3", "a4"],
        arr02 = ["b1", "b2", "b3", "b4"],
        arr03 = ["c1", "c2", "c3", "c4"],
        globalArray = [arr01, arr02, arr03],
        len = globalArray.length,
        i = 0,
        timer;

    function fn(n, k) {
        $("#info").text(n.slice(0, k));
        if (k++ < n.length) timer = window.setTimeout(function() {
            fn(n, k)
        }, 200)
    }
    $("#next").click(function() {
        window.clearTimeout(timer);
        fn(globalArray[i].slice(0), 1);
        i = ++i % len
    })
});
  </script>
</head>

<body>
<button id="next">next</button>

	<div id="info"></div>
</body>

</html>

rvsbox 09.10.2015 04:59

спасибо, но сделал по другому

http://jsfiddle.net/uu064upk/3/

$(function() {
    var arr01 = ['a1', 'a2', 'a3', 'a4'],
    arr02 = ['b1', 'b2', 'b3', 'b4'],
    arr03 = ['c1', 'c2', 'c3', 'c4'],
    globalArray = [arr01, arr02, arr03];
    var k = 0, j = 0;
    
  wer = function() {
        for (var i = 0; i < globalArray[k].length; i++ ) {
                     $("#matrix").text("");
                    setTimeout(function (j) {
                        $("#matrix").append(globalArray[k-1][j]);
                    }, i * 200, i);   // x*1000 skol'ko vsego vremeni potrebuetsja, x - parametr
                }
    }



    $("#next").click(function() {
        if (k < globalArray.length) {
           wer();
            k++;
        } else {
            k = 0;
            wer();
            k++;
        }
    });

});

рони 09.10.2015 06:53

rvsbox,
нажмите быстро кнопку несколько раз в 3 сообщении и в вашем варианте.

rvsbox 09.10.2015 10:27

я так понимаю это из-за setTimeout()??

rvsbox 09.10.2015 10:44

не могук прикрутить
window.clearTimeout(timer);
именно в моем коде.
Понимаю что у меня неудачный скрипт и больше строк, но это необходимо для понимания действия алгоритма

рони 09.10.2015 10:59

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


Часовой пояс GMT +3, время: 14:45.