2012-01-16 124 views
3

我有一些JavaScript函數,它們作爲觸發自定義事件的<object/>對象的事件偵聽器。有問題的對象是啓用JavaScript API的YouTube播放器。該documentation提供附加事件監聽器此示例代碼:使用element.addEventListener的正確方法

function onYouTubePlayerReady(playerId) { 
    ytplayer = document.getElementById("myytplayer"); 
    ytplayer.addEventListener("onStateChange", "onytplayerStateChange"); 
    // note: quotes used ----------------------^---------------------^ 
    // note: callback function defined in an arbitrary location 
} 
function onytplayerStateChange(newState) { 
    alert("Player's new state: " + newState); 
} 

然而,根據addEventListener例子我見過的其他地方不使用引號建議:

function onytplayerStateChange(newState) { 
    alert("Player's new state: " + newState); 
} 
function onYouTubePlayerReady(playerId) { 
    ytplayer = document.getElementById("myytplayer"); 
    // note: callback function defined EARLIER 
    ytplayer.addEventListener("onStateChange", onytplayerStateChange); 
} 

那麼哪種方法?第一個似乎適用於所有瀏覽器,但最近我注意到奇怪的問題,我不知道這些問題是否與addEventListener被調用的方式相關。

+0

功能「onytplayerStateChange」其實是一個「聽衆」,這恰好是一個JavaScript函數,並在那裏提到,聽者應括我找不到任何地方在報價中。所以不要使用引用應該是正確的方法。 – Golmaal 2012-01-16 07:19:11

回答

3

由於addEventListener方法實際上是Flash播放器中暴露的方法,而不是本機的addEventListener,它實際上取決於YTPlayer中AS3代碼的實現。

我會去的文檔和使用引號

+0

'addEventListener'函數實際上看起來不同。這種行爲是否在某處被提及? – 2012-01-16 08:10:40

+0

此處http://code.google.com/apis/youtube/js_api_reference.html#Events – 2012-01-16 09:19:29