Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.10.2015, 20:41
Новичок на форуме
Отправить личное сообщение для rvsbox Посмотреть профиль Найти все сообщения от rvsbox
 
Регистрация: 08.10.2015
Сообщений: 6

Повторный вызов функции
Привет.
Не получается вызвать функцию повторно, чтобы при каждом нажатии выводился массив 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++;
        }
    });
});
Ответить с цитированием
  #2 (permalink)  
Старый 08.10.2015, 20:52
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 30,980

Сообщение от rvsbox
с использованием метода setInterval();
лучше не убивать комп, попробуйте придумать алгоритм без setInterval();
Ответить с цитированием
  #3 (permalink)  
Старый 08.10.2015, 21:27
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 30,980

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>
Ответить с цитированием
  #4 (permalink)  
Старый 09.10.2015, 04:59
Новичок на форуме
Отправить личное сообщение для rvsbox Посмотреть профиль Найти все сообщения от rvsbox
 
Регистрация: 08.10.2015
Сообщений: 6

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

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++;
        }
    });

});
Ответить с цитированием
  #5 (permalink)  
Старый 09.10.2015, 06:53
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 30,980

rvsbox,
нажмите быстро кнопку несколько раз в 3 сообщении и в вашем варианте.
Ответить с цитированием
  #6 (permalink)  
Старый 09.10.2015, 10:27
Новичок на форуме
Отправить личное сообщение для rvsbox Посмотреть профиль Найти все сообщения от rvsbox
 
Регистрация: 08.10.2015
Сообщений: 6

я так понимаю это из-за setTimeout()??
Ответить с цитированием
  #7 (permalink)  
Старый 09.10.2015, 10:44
Новичок на форуме
Отправить личное сообщение для rvsbox Посмотреть профиль Найти все сообщения от rvsbox
 
Регистрация: 08.10.2015
Сообщений: 6

не могук прикрутить
window.clearTimeout(timer);
именно в моем коде.
Понимаю что у меня неудачный скрипт и больше строк, но это необходимо для понимания действия алгоритма
Ответить с цитированием
  #8 (permalink)  
Старый 09.10.2015, 10:59
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 30,980

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

Последний раз редактировалось рони, 09.10.2015 в 11:08.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов функции страницы из расширения chrome nontxt Events/DOM/Window 0 09.02.2015 09:42
Повторный вызов функции TorchTT Общие вопросы Javascript 4 20.03.2014 19:20
Вызов функции из скрытого iframe Beer75 Общие вопросы Javascript 2 05.06.2013 20:36
Повторный вызов функции LCH Элементы интерфейса 3 01.10.2012 18:19
Двойной вызов функции Tmin10 jQuery 8 08.12.2011 13:19