我似乎在将事件列表添加到我的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)};
有效吗?
我不是在代码中完全一样吗?那么为什么它只能在控制台中使用?
答案 0 :(得分:1)
之所以会这样,是因为addEventListener(<string>, <string>)
不是函数,如here所述。
如您所见,关于方法的第二个参数:
这必须是实现EventListener接口或JavaScript函数的对象。有关回调本身的详细信息,请参见事件侦听器回调。
因此不接受字符串。可能您打算传递test
函数变量引用,而不是test
字符串。
因此,只需删除引号:
addEventListener('onStateChange', test);
注意:某些javascript函数也接受字符串代替函数,例如eval
和setTimeout
。但是不鼓励使用