Функция setTimeout JavaScript не вызов

Функционально, да, они одинаковы: -C устанавливает флаг «edit / no-edit» в положение «no», выбирая HEAD в качестве коммита, из которого нужно получить исходное сообщение, а [112 ] устанавливает флаг без установки коммита, который по умолчанию остается равным HEAD. Обратите внимание, что вы можете комбинировать --no-edit с -c для достижения того же результата, что и -C.

5
задан Greg 4 December 2008 в 17:38
поделиться

5 ответов

Когда Вы делаете это:

var func_call = 'slide_down(' + element + ', ' + max_height + ');';

Вы преобразовываете элемент в строку, таким образом, Ваш тайм-аут будет похож

slide_down("[Object]", 100);

который, очевидно, не будет работать.

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

function slide_down(element, max_height)
{   
    if(element.clientHeight < max_height)
    {
        var factor = 10;
        var new_height = (element.clientHeight + factor >= max_height) ? max_height : (element.clientHeight + factor);
        element.style.height = new_height + 'px';

        var func = function()
        {
            slide_down(element, max_height);
        }

        window.setTimeout(func, 10);
    }
}

Также 10 немного коротко для тайм-аута - я рекомендовал бы использовать 50 в качестве минимума.

19
ответ дан 18 December 2019 в 06:13
поделиться

В первую очередь, это "Прямо сейчас у меня есть функция, которая является рекурсивной (называет себя через setTimeout)", крики setInterval мне, если Вы не варьируетесь период.

Во-вторых, это вызвано тем, что ссылка на элемент потеряна в строке concat, как element.toString () будет" [возражают]". Попытайтесь передать в идентификаторе, можно повторно найти, сохранить ссылку уровень, или (поскольку я только что досмотрел матовую точку b до конца), расширенная форма метода.

3
ответ дан 18 December 2019 в 06:13
поделиться

У меня был подобный опыт. При передаче элемента в следующий раз через это становится преобразованным в строку в вызове функции, поэтому когда функция работает, это пытается найти, что названный элемент [возражает] .string или чему-то, вместо того, что Вы предназначили.

Попытайтесь изменить свой параметр функции, чтобы взять идентификатор элемента и сделать, document.getElementById () называет первую вещь в функции.

1
ответ дан 18 December 2019 в 06:13
поделиться

Проблема с Вашим кодом состоит в том, что Вы - сбой для передачи параметра элемента.

Вместо:

var func_call = 'slide_down(' + element + ', ' + max_height + ');';

window.setTimeout(func_call, 10);

попытка с помощью анонимной функции:


window.setTimeout(function() {
    slide_down(element, max_height)
}, 10);

@matt.b: передача аргументов в вызов метода setTimeout (путь Вы делаете) не поддерживается в IE.

1
ответ дан 18 December 2019 в 06:13
поделиться

Две вещи:

1. Существует альтернативный способ звонить setTimeout() в котором Вы передаете функцию и параметры, а не строку для выполнения. На самом деле Геккон руководство DOM заявляет что Ваша версия вызова setTimeout() не рекомендуется.

Вместо:

var func_call = 'slide_down(' + element + ', ' + max_height + ');';
window.setTimeout(func_call, 10);

Попробуйте это вместо этого:

window.setTimeout(slide_down, 10, element, max_height);  

Обновление: как RoBorg упомянул, это не может работать в IE, таким образом, Вы могли бы также проигнорировать его.


2. У меня есть чувство тот вызов setTimeout() из функции, которая была вызвана себя setTimeout() или не позволяется или не работает хорошо. Я предполагаю, что Вы объединяете вызовы в цепочку как это, потому что Вы хотите, чтобы код неоднократно выполнялся? Если так, именно это window.setInterval() для.

0
ответ дан 18 December 2019 в 06:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: