Переменная функции передана setTimeout не работает? - PullRequest
2 голосов
/ 11 марта 2009

Может кто-нибудь сказать мне, почему это не работает?

function changeBG(element_id){
        document.getElementById(element_id).className= "arrowActive";
        setTimeout("document.getElementById("+element_id+").className= 'arrow'", 300);
}

В firebug я получаю сообщение о том, что element_id, переданный setTimeout (), не определен

Ответы [ 3 ]

5 голосов
/ 12 марта 2009

Переменная element_id будет строкой, поэтому ваш код тайм-аута будет выглядеть так:

document.getElementById(myId).className = ...

Обратите внимание, что myId должен быть в кавычках, но это не так.

Лучше использовать закрытие, например:

function changeBG(element_id)
{
        var elm = document.getElementById(element_id);
        elm.className = "arrowActive";
        setTimeout(function() { elm.className= 'arrow'; }, 300);
}

Следует отметить, что передача кода в виде строки не рекомендуется .

2 голосов
/ 12 марта 2009

Лучший способ сделать это с закрытием

function changeBG(element_id)
{
        var elem = document.getElementById(element_id);
        elem.className= "arrowActive";
        setTimeout( function(e)
        {
                return function()
                {
                        e.className = 'arrow';
                }
        }( elem ), 300);
}
2 голосов
/ 12 марта 2009

Попробуйте:

setTimeout("document.getElementById('" + element_id + "').className= 'arrow'", 300);

Обратите внимание, что я добавил кавычки в строковый параметр, который вы передаете getElementById.

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