Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> прерывание вызовов по таймауту, что-то никак.. 
:(
    Опции темы
Alx
Дата 30.9.2007, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



опять меня клинит.. целый день сегодня вешаюсь на одной задаче...

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

нужно использовать именно setTimeout, с setInterval у меня уже получилось, но мне это не подходит..

за целый день уже кучу раз испробывал вариации одного кода:

Код

<script>

window.sending = 0; // счетчик нажатий кнопки

function s()
{   window.sending++; g(true); // вызов по кнопке, считаем вызовы
}
function g(s)
{   s = s || false; // s - вызов по кнопке, !s - вызов по таймауту
    if(window.sending>0 && !s) return; // если функция вызвала сама себя, продолжаем только, если кнопку никто не нажимал
    document.getElementById('bar').innerHTML += " "+s+" "; // просто индикатор вызовов функции
    if(window.sending>0 && s) window.sending--; // конец функции. уменьшаем sending, если вызов был по кнопке
    if(window.sending == 0) setTimeout(function() {g();}, 500); // делаем запрос только если sending = 0 (все вызовы по кнопке прошли)
}

onload=g; 
</script>
<div id="bar">&nbsp;</div>
<br/>
<input type="button" onclick="s();" value="send">


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

Это сообщение отредактировал(а) Alx - 30.9.2007, 17:57


--------------------
PM MAIL WWW ICQ   Вверх
Alx
Дата 30.9.2007, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



о. ура. вроде получилось. как все-таки благоприятно действует форум smile
Код

window.sending = 0; // счетчик нажатий кнопки

function s()
{   window.sending++; g(true); // вызов по кнопке, считаем вызовы
}
function g(s)
{   s = s || false; // s - вызов по кнопке, !s - вызов по таймауту
    if(window.sending>0 && !s) return; // если функция вызвала сама себя, продолжаем только, если кнопку никто не нажимал
    document.getElementById('bar').innerHTML += " "+s+" "; // просто индикатор вызовов функции
     // конец функции. уменьшаем sending, если вызов был по кнопке
    if(window.sending == 1 && s || window.sending == 0)
    setTimeout(function() {
       if(window.sending>0 && s) window.sending = 0;
       g();
    }, 1000);
}

onload=g; 


теперь правда все равно при многократном нажатии кнопки влезают таки ненужные запросы по таймауту. но зато сами таймауты больше не плодятся. а это главное. всем спасибо)

 smile 



--------------------
PM MAIL WWW ICQ   Вверх
SelenIT
Дата 30.9.2007, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



Сорри если не в тему, но... разве нельзя хранить идентификатор последнего вызванного таймаута в статической/глобальной переменной и по нажатию кнопки просто делать ему clearTimeout?


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Alx
Дата 30.9.2007, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



что?.. я даже не подразумевал у существовании clearTimeout...


--------------------
PM MAIL WWW ICQ   Вверх
Alx
Дата 30.9.2007, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



вот называется - живи и удивляйся smile
(у меня в книжке было только setTimeout, setInterval и clearInterval...  smile )


--------------------
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0453 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.