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

时间:2011-07-23 16:53:05

标签: javascript setinterval

我现在已经把头发撕掉几个晚上了解这个问题:

我正在尝试用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()

2 个答案:

答案 0 :(得分:1)

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

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

我会使用jQuery,这很容易。

答案 1 :(得分:0)

curHeight顶部1未将slideDown设置为slideDownExec。如果没有发生这种情况,> a['i'] = 4 4 > a [] > a['i'] 4 顶部的if语句将仅在第一次运行。

此外,JavaScript是否允许非整数数组索引?

i

您实际在做的是向数组对象添加名为{{1}}的属性。您也可以使用空对象而不是数组。