Hàm setTimeout dường như luôn gây rắc rối cho tôi. Ngay bây giờ tôi có một hàm đệ quy (gọi chính nó thông qua setTimeout) và thay đổi chiều cao của các phần tử.Chức năng setTimeout của Javascript không gọi
Hàm được gửi hai đối số: phần tử được thay đổi và chiều cao tối đa của các phần tử đó. Mục đích của hàm là để mở ra phần tử hoặc "trượt xuống" ở tốc độ không đổi. Tôi biết tôi có thể giải quyết vấn đề này với jQuery, nhưng tôi đang thử chức năng của riêng mình.
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);
}
}
Tôi đã thử nghiệm các đối số khi hàm được gọi ban đầu. max_height được đặt thành 20 vì nó là chiều cao mong muốn của các phần tử (tôi nhận giá trị này từ .scrollHeight).
Khi chức năng được thực hiện, tôi muốn nó tự gọi cho đến khi max_height là chiều cao của phần tử. Tôi làm điều đó với cuộc gọi setTimeout này:
var func_call = 'slide_down(' + element + ', ' + max_height + ');';
window.setTimeout(func_call, 10);
Và nó không hoạt động. THIS này hoạt động:
var func_call = 'alert(1);';
window.setTimeout(func_call, 10);
Tôi cũng đã thử thực hiện cuộc gọi hàm trực tiếp vào câu lệnh setTimeout, vẫn không hoạt động.
Lưu ý rằng chiều cao của phần tử KHÔNG thay đổi lần lặp đầu tiên, hàm này không bao giờ tự gọi chính nó. Vì vậy, biến phần tử được đặt chính xác và tôi đã sử dụng alert() để hiển thị max_height cũng chính xác.
alert(func_call);
Cảnh báo này:
slide_down([object HTMLParagraphElement], 20);
Cảm ơn. Tôi đang tìm kiếm nó. – HOT