2012-01-16 122 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