setTimeout函數似乎總是給我帶來麻煩。現在我有一個遞歸函數(通過setTimeout調用它自己)並更改元素高度。Javascript的setTimeout函數不會調用
函數發送兩個參數:要更改的元素和元素的最大高度。該功能的目的是展開元素,或以不變的速度「向下滑動」。我知道我可以用jQuery解決這個問題,但我正在嘗試自己的功能。
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_call = 'slide_down(' + element + ', ' + max_height + ');';
window.setTimeout(func_call, 10);
}
}
我已經測試了函數初始調用時的參數。 max_height被設置爲20,因爲它是元素所需的高度(我從.scrollHeight得到了這個值)。
當函數完成後,我想讓它自己調用,直到max_height是元素的高度。我這樣做setTimeout調用:
var func_call = 'slide_down(' + element + ', ' + max_height + ');';
window.setTimeout(func_call, 10);
而且它不工作。這確實工作:
var func_call = 'alert(1);';
window.setTimeout(func_call, 10);
我也試着把函數直接調用setTimeout語句,仍然不起作用。
請注意,該元素的高度DOES會改變第一次迭代,該函數從未自行調用。所以元素變量設置正確,我用alert()來顯示max_height也是正確的。
資訊:
slide_down([object HTMLParagraphElement], 20);
Mozilla DOM手冊是否錯誤...? – 2008-12-04 17:39:42
嗯我想我從來沒有遇到過這種語法,因爲「請注意,在第一種語法中向函數傳遞附加參數在Internet Explorer中不起作用」。你的第一個鏈接在404之前出現了,所以無論你編輯還是這是一個小故障。 -1刪除 – Greg 2008-12-04 17:42:05