Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как остановить скрипт на девятый раз? (https://javascript.ru/forum/misc/21481-kak-ostanovit-skript-na-devyatyjj-raz.html)

9xakep 11.09.2011 21:24

Как остановить скрипт на девятый раз?
 
<script>
function r2() {
  setInterval(function() {
    var chis_cyd = []
    var res = Math.floor(Math.random() * 10)
    if (res == 0) {
      res += 1
    }
    chis_cyd += res
    document.getElementById('text').value += chis_cyd
  }, 10)
  if (document.getElementById('text').value > 9) {
    r2() = false;
  }
}
</script>
<input type='button' value='push' onclick='r2()'>
<br>
<textarea id='text'>
</textarea>

С кодом все в порядке...почти =)Мне нужно сгенерировать 9 чисел,но как вы понимаете генерируется бесконечное множество, как сделать так чтобы setInterval повторялся только 9 раз?

Александр х@к 11.09.2011 22:09

function foo() {
      var i = 0;
      var time = 0;
      var time_limit = 10*1000; // 10 секунд
      var interval = 100;
      return function() {
          if (i++ < 25) {
              document.getElementById('foo').innerHTML = Math.random();
          }
          else i = 0;
          if(time < time_limit) setTimeout(arguments.callee, interval);
          time+=interval;
      }();
  }

Он останавливает скрипт через 10 сек и выводит число на котором остановилось, а далее ,к сожалению, не знаю
, по моему,надо сделать по такому: Остановилось, запомнить временно(если надо), опять пошёл скрипт, остановилось, запомнило временно(если надо) и так 9 раз

ВНИМАНИЕ скрипт вырван из моего, поэтому в некоторых надо вставить то что соответствует твоей части

walik 12.09.2011 11:52

Попробуй:
var interval = setInterval(function() {
// Тут твой код
}, 10);


А в место строчки
r2() = false;

Поставь
clearInterval(interval);

DjDiablo 12.09.2011 11:57

можно
1 способ) изменить атрибут onclick
2 способ) Поставить условие на проверку тригера перед setInterval

соответственно считать количество set interval и переключать тригер, или менять атрибут уж как хочеш.

DjDiablo 12.09.2011 12:20

Пардон неверно понял задачу


Вот рабочее решение.
<script>
var r2=function() {
 var z=setInterval(function() {
    if (document.getElementById('text').value.length > 8){
       clearInterval(z) 
    }
    else {
	    var chis_cyd = []
	    var res = Math.floor(Math.random() * 10)
	    if (res == 0) {
	      res += 1
	    }
	    chis_cyd += res
	    document.getElementById('text').value += chis_cyd    
}     
}, 10);


}
</script>
<input type='button' value='push' onclick='r2()'>
<br>
<textarea id='text'>
</textarea>

9xakep 12.09.2011 15:19

спасибо,но я уже сам нашел проблему)Не знаю в том или не том ошибка была,но когда я поменял text на text1 то заработало =)
<script>
function r2() {
 var inter  = setInterval(function() {
    var chis_cyd = []
    var res = Math.floor(Math.random() * 10)
    if (res == 0) {
      res += 1
    }
    chis_cyd += res
    document.getElementById('text1').value += chis_cyd
	if(document.getElementById('text1').textLength == 9) {
	clearInterval(inter)
	}
  }, 10)
}
</script>
<input type='button' value='push' onclick='r2()'>
<br>
<textarea id='text1'>
</textarea>

DjDiablo 12.09.2011 16:17

молодец !
Только второе нажатие на кнопку вызывает бесконечную работу.
Наверное от того что во время 2го нажатия добавляется ещё один символ.
Символов становится 10 и условие ==9 уже не исполняется.

именно по этой причине в вышеприведённом примере.
в условии остановки стоит > а не =

а чтобы при нажатии на кнопочку не добавлялось по одной циферке
добавление циферок не происходит если количество символов больше 9.

9xakep 12.09.2011 16:34

да мне это не важно,мне надо один раз генерировать 9 чисел,а потом хоть что с ними делай


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