setInterval () не работает после clearInterval () в этом коде Javascript - PullRequest
1 голос
/ 23 июля 2011

Я пару дней отрывал себе волосы из-за этой проблемы:

Я пытаюсь создать расширяющийся div с помощью JavaScript.Вот часть 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 ]

1 голос
/ 23 июля 2011

Таймер работает, вам просто нужно сбросить переменную:

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

Я бы использовал для этого jQuery, это намного проще.

0 голосов
/ 23 июля 2011

У вас проблема с curHeight, для которого не установлено значение 1 в верхней части slideDown.Если этого не произойдет, оператор if в верхней части slideDownExec будет работать только в первый раз.

Кроме того, разрешает ли JavaScript не целочисленные индексы массивов?

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

На самом деле вы добавляете свойство с именем i к объекту массива.Вы также можете использовать пустой объект, а не массив.

...