2011-08-24 45 views
0

我想修改一個JavaScript的手風琴菜單,以適應我的老闆的需求。但是,現在我已經做了大部分的調整,我已經打了一個虛擬的磚牆。函數expandInit()不接受我傳遞給它的參數。我不斷收到「Object expected」錯誤,但我已經使用typeof()測試了函數的參數,並且它返回參數是一個Object。所以我很難過,任何人都可以放棄的任何光線都會非常有幫助。javascript函數不接受通過對象變量

下面是相關代碼:

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); 
} 
+0

什麼是'expandInit'?你能鏈接或粘貼定義嗎? –

+0

您是否清除瀏覽器緩存(它可能保留了舊的Js代碼)? – VirtualTroll

+0

'typeof($(this.contentNode))'將始終爲'object',即使'this.contentNode'爲undefined或null,因爲它是一個jQuery對象。你可能需要看看'this.parentNode.activeNode'實際上是什麼(查看調試器)。如果您需要進一步的幫助,請包含'expandInit()'的代碼。 – jfriend00

回答

0

我沒有看到expandInit功能有,但我確實看到一個expandTimer功能...

+0

函數expandInit(div){ \t alert(「in expandInit」); \t setDisplay(div,'block'); \t div.style.height ='0px'; \t clearInterval(div.refRate); \t div.refRate = setInterval('expandTimer('+ div +')',10); \t} } – user602232

相關問題