Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.01.2013, 22:39
Новичок на форуме
Отправить личное сообщение для ToDayGoodDay Посмотреть профиль Найти все сообщения от ToDayGoodDay
 
Регистрация: 15.08.2011
Сообщений: 9

Циклический вызов с задержкой.
Скрипт для Grease Monkey.


var url_cur = location.href ;
var name_pos = 0;
var cur_name = '';
		
var list_name = [ "test1" , "test2" ];


for(var j=0;j<list_name.length;j++){
	alert('!');
	temp(j);
}

function temp(j){
		var timeout_id = setTimeout(function(){
			alert(j);

			cur_name = list_name[j];
			alert(cur_name);
			if(check()){
				send_do(cur_name);
			}
			else{
				enter();
				send_do(cur_name);
			};
		},10000);

}


Цель:

Проход по всему массиву с некоторой задеркой. Однако, зацикливается на нулевом элементе и дальше никак не работает. Порыл в инете, перепробовал несколько вариантов. Ничего не получается.

Последний раз редактировалось ToDayGoodDay, 31.01.2013 в 22:41.
Ответить с цитированием
  #2 (permalink)  
Старый 31.01.2013, 22:49
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

<script>
var url_cur = location.href ;
var name_pos = 0;
var cur_name = '';
		
var list_name = [ "test1" , "test2" ];


for(var j=0;j<list_name.length;j++){
	alert('j(цикла)='+j);
	temp(j);
}

function temp(j){
		var timeout_id = setTimeout(function(){

			cur_name = list_name[j];
			alert('j(с задержкой)='+j+'; cur_name='+cur_name);
			if(check()){
				send_do(cur_name);
			}
			else{
				enter();
				send_do(cur_name);
			};
		},1000);

}
</script>

Сообщение от ToDayGoodDay
Ничего не получается.
Это может бвть в случае наличия функций:check(); send_do() и enter() и их кривой работе

Последний раз редактировалось Deff, 31.01.2013 в 22:55.
Ответить с цитированием
  #3 (permalink)  
Старый 01.02.2013, 05:56
Новичок на форуме
Отправить личное сообщение для ToDayGoodDay Посмотреть профиль Найти все сообщения от ToDayGoodDay
 
Регистрация: 15.08.2011
Сообщений: 9

Эти функции к ошибке не имеют отношение. Т.к.
1. При их изъятии также происходит зацикливание на 0-ом элементе.
2. Они стабильно работают уже более года.
3. Также нет задержки между сообщениями. Все выводятся сразу.

Последний раз редактировалось ToDayGoodDay, 01.02.2013 в 07:31.
Ответить с цитированием
  #4 (permalink)  
Старый 01.02.2013, 07:41
Новичок на форуме
Отправить личное сообщение для ToDayGoodDay Посмотреть профиль Найти все сообщения от ToDayGoodDay
 
Регистрация: 15.08.2011
Сообщений: 9

alert(list_name.length);
if (name_pos < list_name.length) 
{
	alert(name_pos);
	temp(name_pos);
	
	name_pos++;
}

function temp(name_pos){
		var timer = setTimeout(function(){
			alert(name_pos);
			
			cur_name = list_name[name_pos];
			alert(cur_name);
			
		},10000);
}


Так тоже зависает на нулевом. Возможно не учел какие-то особенности GreaseMonkey ?

Последний раз редактировалось ToDayGoodDay, 01.02.2013 в 07:54.
Ответить с цитированием
  #5 (permalink)  
Старый 01.02.2013, 08:12
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

А почему между ними должна возникнуть задержка?
Вы в цикле запускаете несколько таймеров. Через 10 секунд все таймеры истекают и выполняются все заданные функции, практически одновременно.
Либо увеличивайте каждый раз время таймаута (что не есть гуд), либо запускайте таймеры по цепочке. Тоесть каждый раз выполняется функция, отрабатывает и запускает следующий таймер. Хз че вы получить хотите, еслиб подробней объяснили - было бы проще.
Ответить с цитированием
  #6 (permalink)  
Старый 01.02.2013, 08:14
Новичок на форуме
Отправить личное сообщение для ToDayGoodDay Посмотреть профиль Найти все сообщения от ToDayGoodDay
 
Регистрация: 15.08.2011
Сообщений: 9

Грубо говоря мне нужно отправить 10 сообщений. Отправил первое. Задержка 10 сек, отправил второе. Задержка 10 секунж. Отправил третие.

Примерно так:

var name_pos = 0;

if (name_pos < 100) 
{
	alert(name_pos);
		
		var timer = setTimeout(function(){
			alert(name_pos);
			
		name_pos++;	
		},10000);

}


Т.е. по идее он должен выводить 1,2,3,4.. с задержкой в 10 секундн. Он он выводит только 0 и каждую секунду.

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

Последний раз редактировалось ToDayGoodDay, 01.02.2013 в 08:27.
Ответить с цитированием
  #7 (permalink)  
Старый 01.02.2013, 08:33
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

<script>
var messages = ['Доброе утро',  'Добрый день',  'Добрый вечер'];

function queueMessages ( messages ) {
    var index = 0;
    function queueMessage () {
        setTimeout(function () {
            sendMessage( messages[ index ++ ] );
            if ( messages[ index ] !== undefined ) {
                queueMessage();
            }
        }, 3000);
    }
    queueMessage();
}


function sendMessage ( message ) {
    document.body.appendChild( document.createTextNode( message + '! ' ) );
}


queueMessages( messages );
</script>
Ответить с цитированием
  #8 (permalink)  
Старый 01.02.2013, 10:36
Новичок на форуме
Отправить личное сообщение для ToDayGoodDay Посмотреть профиль Найти все сообщения от ToDayGoodDay
 
Регистрация: 15.08.2011
Сообщений: 9

Ошибка оказалась связана с работой самого плагина. Точнее не полнного понимания принципа его работы. При обновлении страницы, которое у меня происходит, он запускается понову. т.о. и происходит зацикливание на 0-ом элементе. Как от подобного можно избавиться?
В итоге получилось что мои предыдущ. варианты все-таки оказались правильными. Так же как и правильными все функции, однако из-за особенности работы плагина все работает не так как нужно.
Ответить с цитированием
  #9 (permalink)  
Старый 01.02.2013, 10:53
Аватар для Serg_pnz
Сам по себе
Отправить личное сообщение для Serg_pnz Посмотреть профиль Найти все сообщения от Serg_pnz
 
Регистрация: 09.06.2009
Сообщений: 963

А если флаги в куки пихнуть?
Так же возможно стоит поставить какое-то ограничение на выполняемость, т.е. уйти от срабатывания на скрипты, выполняемые в фоновом режиме
// @include        *site.ru/forest_php.php*

В моём случае ГМ реагирует только на выполнение forest_php.php, который запускается в фоне.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рекурсивный вызов функции с задержкой gv0zd jQuery 5 14.08.2012 12:49
?!Множественный вызов contextMenu!? fen0man jQuery 3 22.05.2012 10:02
Двойной вызов функции Tmin10 jQuery 8 08.12.2011 15:19
Вызов функций iframe из кода Firefox-расширения Jury Firefox/Mozilla 0 03.05.2011 13:09
Явный вызов процедуры обработки события. supchik Общие вопросы Javascript 18 27.01.2009 13:16