2012-07-03 305 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