在此Javascript代码中,setInterval()在clearInterval()之后不起作用

setInterval() not working after clearInterval() in this Javascript code

本文关键字:之后 不起作用 clearInterval setInterval Javascript 代码 在此      更新时间:2023-09-26

我已经被这个问题扯掉了我的头发几个晚上了:

我试图用JavaScript创建一个扩展div。这是HTML文件的一部分:

<div id="bbc_div" class="bbc_div" style="display:none; height:200px;">
<input type="button" value="Show BBC" id="bbc_button" onclick="onclickBBC('bbc_div')" />

这里是神奇的不工作的JavaScript文件:

var maxHeight = 100;
var curHeight = 1;
var wait = 5;
var timerID = new Array();
function onclickBBC(obj) {
    if (document.getElementById(obj).style.display == "none") {
        slideDown(obj);
    } 
    else {
        document.getElementById(obj).style.display="none"
    }
}
function slideDown(obj) {
    document.getElementById(obj).style.height="1px";
    document.getElementById(obj).style.display="block";
    timerID[obj] = setInterval("slideDownExec('"" + obj + "'")", wait);
    return;
}
function slideDownExec(obj) {
    if (curHeight <= maxHeight) {
        curHeight++;
        document.getElementById(obj).style.height=curHeight + "px";
    }
    else {
        endSlide(obj);
    }
    return;
}
function endSlide(obj) {
    clearInterval(timerID[obj]);
    return;
}

当我重新加载页面时,div展开一次到正确的高度。但是,如果我按下按钮,而没有重新加载页面后再次隐藏,它不工作。display:block;工作,但setInterval()不能启动。所以这发生在clearInterval()执行之后。为什么clearInterval()会永久地杀死我的setInterval() ?

计时器正在运行,您只需要重置一个变量:

    function slideDown(obj)
    {
        document.getElementById(obj).style.height = "1px";
        curHeight = 1;

我会使用jQuery,这是一个更容易。

您在slideDown的顶部没有设置curHeight1的问题。如果没有发生这种情况,slideDownExec顶部的If语句将只在第一次工作。

另外,JavaScript允许非整数数组索引吗?

> a['i'] = 4
4
> a
[]
> a['i']
4

你实际上做的是添加一个名为i的属性到数组对象。不如使用空对象而不是数组。