2009-10-14 93 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()鉤子。