2012-07-03 46 views
0

我有這樣的JavaScript塊,它的種類從http://www.developphp.com/view.php?tid=1248被破解,我看到「undefined variable - broadcast」的錯誤。Javascript未定義變量函數之前

function cdtd(broadcast) { 
    /* expected date format is Month DD, YYYY HH:MM:SS */ 
    var nextbroadcast = new Date(broadcast); 
    var now = new Date(); 
    var timeDiff = nextbroadcast.getTime() - now.getTime(); 
    if (timeDiff <= 0) { 
     clearTimeout(timer); 
     document.getElementById("countdown").innerHTML = "<a href=\"flconlineservices.php\">Internet broadcast in progress<\/a>"; 
     /* Run any code needed for countdown completion here */ 
    } 
    var seconds = Math.floor(timeDiff/1000); 
    var minutes = Math.floor(seconds/60); 
    var hours = Math.floor(minutes/60); 
    var days = Math.floor(hours/24); 
    hours %= 24; 
    minutes %= 60; 
    seconds %= 60; 
    document.getElementById("daysBox").innerHTML = days + " d"; 
    document.getElementById("hoursBox").innerHTML = hours + " h"; 
    document.getElementById("minsBox").innerHTML = minutes + " m"; 
    // seconds isn't in our html code (javascript error if this isn't commented out) 
    /*document.getElementById("secsBox").innerHTML = seconds + " s";*/ 
    var timer = setTimeout('cdtd(broadcast)',1000); 
} 

「」的頁面會傳遞「廣播」。 $ nextbroadcast基於用戶查看頁面的日期/時間。我想嘗試var broadcast;,var broadcast = "";var broadcast = null;。每當我嘗試在函數之前聲明變量時,它就會中斷腳本。

我做錯了什麼嗎?腳本正在工作,很好,但我寧願沒有錯誤。

+0

你試過周圍的PHP去除引號? –

+0

@AlexW我剛剛嘗試刪除引號,並打破了劇本。 – doubleJ

回答

2

更改以下行:

var timer = setTimeout('cdtd(broadcast)',1000);

要這樣:

var timer = setTimeout(function() { cdtd(broadcast); }, 1000);

+0

修復了它。不過,我不確定爲什麼。廣播在獲得該功能之前已使用了兩次。 – doubleJ

+1

是的,但在您的原始代碼中,您傳遞了一個字符串'cdtd(broadcast)',但該參數不支持帶參數的函數,所以javascript引擎正在尋找一個名爲** cdtd(broadcast) **,這不存在。你需要提供一個匿名函數來調用帶有參數的函數。 – greg84

+0

我需要了解更多關於javascript的信息。呵呵呵... – doubleJ

2

這可能是問題的所在:

var timer = setTimeout('cdtd(broadcast)',1000); 

你應該申報var timer;以上cdtd()功能,然後將其設置的功能等,從而低於

var func = 'cdtd(' + broadcast + ')'; 

timer = setTimeout(func,1000); 
+0

不確定這是必需的,'broadcast'的值已經可用,它被傳遞給函數以開始。它應該能夠使用它在下一次被調用時已經獲得的內容。這是我相信doubleJ試圖實現的。看到我的答案。 – greg84

+0

如果javascript是在php文件中,那將會起作用。我有一個類似的事情,最初,因爲我不知道如何將一個變量傳遞給外部的JavaScript。 – doubleJ