2009-10-14 53 views
1

我加载了我的页面上的所有内容。 最后,我有这个脚本。为什么这个JavaScript工作...但这不?

<script type="text/javascript">loadNewVideo('u1zgFlCw8Aw',0)</script> 

它不起作用。 但是,如果我这个替代它,它的工作原理:

<input type="submit" onclick="loadNewVideo('u1zgFlCw8Aw',0);" > 

在.js文件,这是功能:

function loadNewVideo(id, startSeconds) { 
      alert('In-the-function'); 
      if (ytplayer) { 
      alert('Found-ytplayer'); 
      ytplayer.loadVideoById(id, parseInt(startSeconds)); 
      } 
     } 

显然,“YouTube播放器”是第一个假的! ??

+2

您应该显示完整的代码。 ytplayer从哪里来? – 2009-10-14 08:32:36

+3

ytplayer在哪里定义,它是什么? – 2009-10-14 08:35:28

+0

如果你可以给我们一个链接,那么我们可以看看Firebug,或者你可以... – Skilldrick 2009-10-14 09:17:26

回答

4

我没有答案,但也许这将帮助你找出当YouTube播放组件准备使用:

var startTimer = new Date().getTime(); 
function ytplayerReadyCheck() { 
    var ready = !!ytplayer; 
    if (!ready) { 
    window.setTimeout(ytplayerReadyCheck,50); 
    } 
    else { 
    var endTimer = new Date().getTime(); 
    alert('ytplayer is now ready!\n\nWe waited '+(endTimer-startTimer)+' milliseconds for it'); 
    loadNewVideo('u1zgFlCw8Aw', 0); 
    } 
} 
ytplayerReadyCheck(); 

当然,这是几乎没有替代搞清楚ytplayer首先被定义!也许它是在.js文件中定义的,该文件在加载后之后动态加载

我强烈建议您抓住Firebug,这样您可以更轻松地调试这种事情。

+0

正确。在ytplayer加载之前需要一些时间。因此,我在调用loadNewVideo函数之前放了一个setTimeout!然后它工作。 – TIMEX 2009-10-14 19:58:07

9

我不知道ytplayer是什么,但我想这个问题与DOM没有被完全加载有关。你试过这个吗?

<script type="text/javascript"> 
$(document).ready(function() { 
    loadNewVideo('u1zgFlCw8Aw', 0); 
}); 
</script> 

编辑:如果这不起作用,你将不得不给我们更多的信息。正如蒂姆和彼得问你对你的问题的评论,你能告诉我们在哪里定义了ytplayer,它是什么?我假设它代表YouTube播放器,也许它正在加载/定义你打电话loadNewVideo?例如,如果上面的代码段位于文档中定义的ytplayer以上的部分之上,则在加载ytplayer之前,仍会调用此函数,具体取决于您如何加载它。正如我所说,请提供更多信息。

+0

确实,你是正确的;只要它被读取,javascript就会运行,所以你需要确定你想要的任何东西是关于你正在运行的脚本声明的,或者(更好的是)在'load'事件中做所有事情(如你所示):) – 2009-10-14 08:35:02

+1

@silky :注意,准备就绪!=加载 – 2009-10-14 08:38:46

+0

这不起作用。我试过jQuery中的document.ready。 – TIMEX 2009-10-14 08:40:02

4

我想说这是因为DOM在该阶段没有完全加载。你想钩住onLoad事件,或者使用jQuery来获取$(document).ready()钩子。