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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как передать параметры функцией setInterval 
V
    Опции темы
Nickname
Дата 15.2.2008, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Понимаю, что это можно делать как-то так:
Код

setInterval("alert('"+text+"')", 1000);

но можно как-то подругому через args:
Цитата

setInterval(expression, msecs[, args | language])
args  -  Дополнительный список параметров с разделителями-запятыми, которые нужно пропустить в функцию, используемую как параметр выражения

PM MAIL   Вверх
Ghirik
Дата 15.2.2008, 10:27 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 919
Регистрация: 26.3.2007

Репутация: 13
Всего: 20



Вроде как то так:

setInt = setInterval(function (i){return function(){ time(i)}}(i), t);

Если не напутал....

Добавлено @ 10:28
Т.е. аргумент в последних скобках...

setInt = setInterval(function (i, c, a){return function(){ time(i, c, a)}}(арг1, арг2, арг3), t);


Это сообщение отредактировал(а) Ghirik - 15.2.2008, 10:30


--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
Nickname
Дата 15.2.2008, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Ghirik, не смог разобраться с вашим примером - остановился на
Код

setInterval("alert('"+text+"')", 1000);


Это сообщение отредактировал(а) Nickname - 15.2.2008, 11:08
PM MAIL   Вверх
Ghirik
Дата 15.2.2008, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 919
Регистрация: 26.3.2007

Репутация: 13
Всего: 20



Код

setInterval(function (txt){return function(){ alert(txt)}}('text'),  1000);


а так:

Код

setInterval("alert('"+text+"')", 1000);


не корректно.

Это сообщение отредактировал(а) Ghirik - 15.2.2008, 11:16


--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
ksnk
Дата 15.2.2008, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


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

Репутация: 84
Всего: 386



Nickname, 
Код

function showMessage(msg){
   alert(msg)
}
//...
setTimeout(showMessage,1000,'Hello!');
 Про это, что-ли, вопрос?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Ghirik
Дата 15.2.2008, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 919
Регистрация: 26.3.2007

Репутация: 13
Всего: 20



Цитата

Про это, что-ли, вопрос? 


Я точно не помню, но какие то ограничения были такому методу передачи параметров...
Или мне приснилось... smile 




--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
ksnk
Дата 15.2.2008, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


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

Репутация: 84
Всего: 386



Цитата(Ghirik @  15.2.2008,  11:40 Найти цитируемый пост)
Или мне приснилось...

Нет, оказывается не приснилось...  IE про такой способ использования setTimeout'а ничего не знает... 
Так что остается только замыкание.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Michael.de
Дата 17.2.2008, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 22.3.2005
Где: Deutschland

Репутация: 2
Всего: 9



Чтобы новую тему не открывать, спрошу тут, благо вопрос похожий.
Вопрос: Функция как параметр другой функции (на примере паузы)

Код
var id;

function fStart() {
 id = window.setInterval("fCycle()", 1000);
}

function fСycle() {
 // Повторяющийся код
}

function fStop() {
 window.clearInterval(id);
}
Вышеприведённый пример (спёрт >>отсюда<<) не очень подходит (function fStart), т.к. она без параметров... в идеале хотелось бы иметь универсальную ф-цию, параметрами которой являются задержка, исполняемая ф-ция и напр. число повторов. Меня интересует только синтаксис её декларирования и вызова... что-то вроде:
Код

function fPause(millis, ?????, cycle) {
 var id = window.setInterval("?????", millis);
 while (cycle>0) {
  cycle--;
  // code
 }
 window.clearInterval(id);
}

fPause(500, ?????, 5);
 smile  please smile
PM MAIL   Вверх
Sardar
Дата 17.2.2008, 05:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Код
<div id="test"></div>
<script type="text/javascript">
<!--

//интервал с лимитом  times
function limitedInterval(func, time, times) {
    if(times < 1) return;
    var tmr = window.setInterval(function() {
        //за место простого вызова можно func.apply(this, slice(arguments, 3)), что бы передавать аргументы обратбочику
        func();
        if(--times < 0) window.clearInterval(tmr);
    }, time);
}


//пример использования
var i = 0
limitedInterval(function() {
    document.getElementById("test").innerHTML = i++;
}, 1000, 5);

//-->
</script>



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Michael.de
Дата 17.2.2008, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 22.3.2005
Где: Deutschland

Репутация: 2
Всего: 9



Sardar, большое спасибо  smile 

я тут чуть "модифицировал" код под себя:
Код

<div id="test">&nbsp;</div> <!-- "инициализация" div с помощью &nbsp;-->
<script type="text/javascript">
<!--

// интервал с лимитом times
function limitedInterval(func, time, times) {
 if(times < 1) return;
 var tmr = window.setInterval(function() {
 // вместо простого вызова можно func.apply(this, slice(arguments, 3)), чтобы передавать аргументы обработчику
  func();
  if(--times < 0) window.clearInterval(tmr);
 }, time);
}

// пример использования
function blaBla(){
 document.getElementById("test").firstChild.nodeValue = i++; // заменил innerHTML
}

var i = 0;
limitedInterval(blaBla, 1000, 5);

//-->
</script>

но появился доп. вопрос: если ф-ция blaBla() тоже имеет параметры:
Код

// пример использования
function blaBla(x){
 document.getElementById("test").innerHTML = i++;
 // code
}

limitedInterval(blaBla(0), 1000, 5); // ?????

... Как мне её правильно вызвать из limitedInterval()? Как я написал не работает :((

Это сообщение отредактировал(а) Michael.de - 17.2.2008, 21:15
PM MAIL   Вверх
Sardar
Дата 17.2.2008, 21:43 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Ты вызываешь функцию blaBla прежде чем передать её в limitedInterval.

Код
limitedInterval(function() { blaBla(0); }, 1000, 5);

На будущее, после формы ответа идёт "А здесь смотрели?". Полистай пару тем, потом уже пиши, т.к. этот вопрос задаётся не первый десяток раз.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Michael.de
Дата 17.2.2008, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 22.3.2005
Где: Deutschland

Репутация: 2
Всего: 9



Класс, спасибо  smile

Когда я хотел создать новую тему, я увидел среди "А здесь смотрели?" эту, решил не плодить новые и задать вопрос тут. Моя тема называлась иначе и в "А здесь смотрели?" список был другой. Как-то так  smile
PM MAIL   Вверх
BrutalMetal
Дата 24.5.2008, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 29.4.2008

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



Скадите пожалуйста, почему часто используют setInterval так:
Код

setInterval(function (){alert('hellow world')},  3000);


а не так:
Код

setInterval("alert('hellow world')", 2000); 

 
Как правильнее использовать?


Это сообщение отредактировал(а) BrutalMetal - 24.5.2008, 23:19
PM MAIL   Вверх
Ghirik
Дата 24.5.2008, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 919
Регистрация: 26.3.2007

Репутация: 13
Всего: 20



А t Вы зачем в скобках написали? smile
Оно и без этого работает.

Смотрите в консоль ошибок Мозиллы, если не ругается, значит потянет...




--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
BrutalMetal
Дата 24.5.2008, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 29.4.2008

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



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


 




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


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

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