Почему функция setTimeout () запускается только один раз? - PullRequest
10 голосов
/ 24 декабря 2010

Я делаю javascript bookmarklet, который периодически меняет размеры всех изображений.

javascript: function x(){
    for(i=0;i<=document.getElementsByTagName('img').length;i++)
        document.getElementsByTagName('img')[i].width+=1;
};
t = window.setTimeout("x()",100);
void(0);

Но он запускается только один раз. В чем здесь проблема ??

Ответы [ 6 ]

31 голосов
/ 24 декабря 2010

Вы ищете setInterval() вместо setTimeout() случайно?

t = window.setInterval("x()",100);
0 голосов
/ 24 декабря 2010

Вам нужно поместить ...

t = window.setTimeout("x()",100);

внутри функции x () в скобках {}, и она работает с SetTimeout ()

function x() {
    for(i=0;i<=document.getElementsByTagName('img').length;i++)
        document.getElementsByTagName('img')[i].width+=1;

t = window.setTimeout("x()",100);
};

    x();

void(0);

Вы можете вызвать только x() после того, как все изображения были загружены на страницу или произошла ошибка.

0 голосов
/ 24 декабря 2010

Также есть синтаксическая ошибка.

для (I = 0;. I <= document.getElementsByTagName () длины '' Img; <strong>я ++ )

0 голосов
/ 24 декабря 2010

Разве это не должно быть i++ в конце цикла for?

0 голосов
/ 24 декабря 2010

Это может быть window.setTimeOut("x",100)

Изменить: исправить ответ на этот window.setTimeout(x,100).

PS: это то, что происходит, если вы просто работаете с IDE.

0 голосов
/ 24 декабря 2010

Здесь тот же код, с правильным отступом для ясности

function x() {
    for(i=0;i<=document.getElementsByTagName('img').length;++)
        document.getElementsByTagName('img')[i].width+=1;
};
t = window.setTimeout("x()",100);
void(0);

window.setTimout () выполняет переданный код только один раз, потому что он предназначен.Если вы хотите выполнять код чаще, используйте window.setInterval ().

...