функция JavaScript не принимает переданные переменные объекта - PullRequest
0 голосов
/ 24 августа 2011

Я пытаюсь изменить javascript аккордеонное меню, чтобы соответствовать потребностям моего босса. Однако теперь, когда я сделал большинство изменений, я наткнулся на виртуальную кирпичную стену. Функция expandInit () не принимает аргументы, которые я ей передаю. Я продолжаю получать сообщение об ошибке «Ожидается объект», но я проверил аргументы для функции с помощью typeof (), и он возвращает, что аргумент является объектом. Так что я в замешательстве, любой свет, который кто-то мог бы пролить на это, был бы очень полезен.

Вот соответствующий код:

function $(id){
  return document.getElementById(id);
}

function expandTimer(div){
  if(getHeight(div) < div.maxh){
    var velocity = Math.round((div.maxh - getHeight(div)) / div.speed);
    velocity = (velocity < 1) ? 1 : v;
    velocity = (getHeight(div) + velocity);
    setHeight(div, velocity+'px');
    div.style.opacity = (velocity / div.maxh);
    div.style.filter = 'alpha(opacity = '+(velocity * 100 / div.maxh)+');';
  } else {
    setHeight(div, div.maxh);
    clearInterval(div.refRate);
  }
}

//arg types are String, Int, and, String.
function accordian(mother, speed, alternate){
  var motherObj = $(mother);
  motherObj.activeNode='';
  var allDivs = motherObj.getElementsByTagName('div');
  for (var i = 0; i < allDivs.length; i++){
    var divID = allDivs[i].id;
    if (divID.substr(divID.indexOf('-') + 1, divID.length) == 'header'){
      var contentID = divID.substr(0, divID.indexOf('-'))+'-content';
      var divObj = $(divID);
      divObj.contentNode = contentID;
      divObj.hightlight = alternate;
      var contentObj = $(contentID);
      contentObj.style.display = 'none';
      contentObj.style.overflow = 'hidden';
      contentObj.maxh = getHeight(contentObj);
      contentObj.speed = speed;
      contentObj.refRate;
      divObj.onmouseover = function(){
        if (this.parentNode.activeNode != ''){
          collapseInit($(this.parentNode.activeNode));
        }
        alert (typeof($(this.contentNode))); //returns 'object'
        //code executes fine up until here.
        expandInit($(this.contentNode));
        this.parentNode.activeNode = this.contentNode;
      }
    }
  }
}

Хотя я не включил код collapseInit (), у меня такая же проблема. Достаточно сказать, что все остальные функции, указанные выше, работают как задумано.

РЕДАКТИРОВАТЬ: Извините, не включил правильную функцию. Вот функция expandInit ():

function expandInit(div){
  alert("in expandInit"); //<---does not execute.
  setDisplay(div,'block');
  div.style.height='0px';
  clearInterval(div.refRate);
  div.refRate = setInterval('expandTimer('+div+')', 10);
}

1 Ответ

0 голосов
/ 24 августа 2011

Я не вижу там функции expandInit, но вижу функцию expandTimer ...

...