javascript - 无法添加事件监听器?

标签 javascript youtube-api

我在向 YT.player 添加事件列表器时似乎遇到问题。

var ytapi = document.createElement('script');
ytapi.src = "https://ww" + "w.youtube" + ".com/iframe_api";
var scriptref = document.getElementsByTagName('script')[0];
scriptref.parentNode.insertBefore(ytapi, scriptref);
window.players = [];

function onPlayerStateChange(event) {
    switch(event.data) {
        case YT.PlayerState.ENDED:
            alert('VIDEO IS ENDED');

        case YT.PlayerState.CUED:
            alert('VIDEO IS CUED');

        case YT.PlayerState.PAUSED:
            alert('VIDEO IS PAUSED'); 
            break;
    }
};

window.onYouTubeIframeAPIReady = function() {
    jQuery('iframe[src*="youtube.com"]').each(function() {
        var id = jQuery(this).attr('id');
        window.players[id] = new YT.Player(id);
        window.players[id].addEventListener('onStateChange','onPlayerStateChange');
    });
};

OnStateChange没有被触发,但是

如果我在浏览器控制台中执行

window.players[id].addEventListener('onStateChange','test');
function test(event){alert(event.data)};

有效吗?

我在代码中做的不是完全相同吗?那么为什么它只能在控制台中工作?

最佳答案

发生这种情况是因为 addEventListener(<string>, <string>)不是一个函数,如所述 here .

正如您所读到的,关于该方法的第二个参数:

This must be an object implementing the EventListener interface, or a JavaScript function. See The event listener callback for details on the callback itself.

因此不接受字符串。也许你想通过 test函数变量引用,而不是 test字符串。

所以,只需去掉引号即可:

addEventListener('onStateChange', test);

注意:一些 javascript 函数也接受字符串代替函数,例如 evalsetTimeout 。但不鼓励使用

关于javascript - 无法添加事件监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54306248/

相关文章:

javascript - Firebase - 不推荐使用多位置更新方法,现在怎么办?

javascript - Angular ng-repeat 无法正常工作

javascript - 如何在滚动和使用 jquery 偏移量时减少闪烁

youtube - 我们可以利用youtube api使其在不同点处暂停,并使用按钮作为暂停点在暂停点处播放

java - 将 YouTube 视频添加到播放列表会引发 InvalidEntryException

php 中的 javascript 代码无法访问 html 元素。 document.getElementById 不起作用

javascript - 如何用Konva连续绘制 split 多边形?

youtube-api - Youtube v3 API当前可以用于检索与用户不相关的 channel 的数据吗?

youtube-api - authorProfileImageUrl 只返回一个小缩略图

youtube - 使用JavaScript跟踪Youtube Iframe Player中的社交分享