无法添加Eventlistner?

时间:2019-01-22 10:30:41

标签: 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)};

有效吗?

我不是在代码中完全一样吗?那么为什么它只能在控制台中使用?

1 个答案:

答案 0 :(得分:1)

之所以会这样,是因为addEventListener(<string>, <string>)不是函数,如here所述。

如您所见,关于方法的第二个参数:

  

这必须是实现EventListener接口或JavaScript函数的对象。有关回调本身的详细信息,请参见事件侦听器回调。

因此不接受字符串。可能您打算传递test函数变量引用,而不是test字符串。

因此,只需删除引号:

addEventListener('onStateChange', test);

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