[JS] Подскажите как изменить значение внутренней переменной функции

Ufaweb
На сайте с 03.03.2008
Offline
182
2536

Имеется примерно такой код:

function timer(div, sec){
...
setTimeout("timer('"+div+"', "+(sec-1)+");", 1000);
}

Отдельной функцией каждые 5 сек деляются ajax-запросы к серверу. В определенный момент времени сервер вернет функцию, которая должна поменять время на счетчике т.е. установить новое значение переменной sec в функции timer().

Собственно вопрос: каким образом изменить значение sec в уже запущенной функции?

ewg777
На сайте с 04.06.2007
Offline
225
#1

Мда..........

Ufaweb
На сайте с 03.03.2008
Offline
182
#2
ewg777:
Просто div = 100500; не подходит?

Не дописал сообщение, форма сама отправилась *sorry*

Перечитайте плз сообщение...

[Удален]
#3

Ufaweb, используйте глобальную перменную да и все, и второй параметр функции опустите

Ufaweb
На сайте с 03.03.2008
Offline
182
#4
bearman:
Ufaweb, используйте глобальную перменную да и все, и второй параметр функции опустите

Да, уже так и сделал. Вот только теперь косяк такого плана:

function timer(div){
alert(timeout[div]);
...
setTimeout("timer('"+div+");", 1000);
}
timeout= [];
timeout['timeout1']= 341;
timeout['timeout2']= 157;
Код выше не работает т.е. в алерте пишет undefined.

Если в функции явно прописать alert(timeout['timeout1']), то все работает.

Несоответствие типов? Как поправить?

[Удален]
#5

div.toString()

Ghost Bear
На сайте с 01.07.2009
Offline
28
#6

Твой второй ответ внес еще больше неясности. Тут важно как ты аякс запрос делаешь - ибо ответ с сервера придет _после_ запуска setTimeout. Тебе надо сделать чтобы setTimeout выполнялось только после получения ответа с сервера, иначе ты затаймаутишь "старую" переменную, а не ту, что получит с сервера аякс запрос.

--

Как бы там не было, стоит изменить на var timeout = {};

Пишу продвинутый веб-софт и автоматизирую сео-задачи на партнёрских условиях. Ваша тема + Мой код = Совместный успех. Велком в ЛС.
Ufaweb
На сайте с 03.03.2008
Offline
182
#7

Всем спасибо, все сделал. Во втором варианте (с глобалваром) перепутал div и элементы массива *sorry*

Все в приниципе заработало.)

Ufaweb добавил 05.08.2009 в 14:17

Ghost Bear:
Твой второй ответ внес еще больше неясности. Тут важно как ты аякс запрос делаешь - ибо ответ с сервера придет _после_ запуска setTimeout. Тебе надо сделать чтобы setTimeout выполнялось только после получения ответа с сервера, иначе ты затаймаутишь "старую" переменную, а не ту, что получит с сервера аякс запрос.

--

Как бы там не было, стоит изменить на var timeout = {};

Нет, если переменная счетчика глобальная, то никаких проблем не возникнет. А вот по поводу моего изначального желания "вторгнуться" в функцию - вот это действительно глупо ибо нужно будет как минимум знать экземпляр функции, запущенный в данный момент :)

sowich
На сайте с 11.06.2007
Offline
26
#8

ТС а statiс нельзя было использовать?

Мой блог (http://sowich.info) Пишу скрипты на php, perl - велком!
[Удален]
#9

в яваскрипте нет static (хотя добиться того же эффекта можно довольно легко), но в любом случае непонятно как он здесь поможет.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий