javascript - 无法添加Eventlistner?
问题描述
我似乎在将事件列表器添加到我的 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>)
它不是一个函数,如此处所述。
如您所见,关于该方法的第二个参数:
这必须是实现 EventListener 接口的对象或 JavaScript 函数。有关回调本身的详细信息,请参阅事件侦听器回调。
所以不接受字符串。可能您的意思是传递test
函数变量引用,而不是test
字符串。
因此,只需删除引号:
addEventListener('onStateChange', test);
注意:一些 javascript 函数也接受字符串代替函数,例如eval
和setTimeout
。但不鼓励使用
推荐阅读
- oracle - 如果我们使用 colsep,sql plus 输出不会以正确的 CSV 格式出现,
- android - MPAndroidChart如何在kotlin中显示带有标签底部的条形颜色
- angular - 为单元测试注入自定义管道
- python - TypeError: forward() 接受 2 个位置参数,但给出了 3 个,ERROR Mask R CNN
- buffer - Direct3D 12 中的 W-Buffer(ing)
- html - Angular:在routerLink中创建一个routerLink
- javascript - Loop the http request to the page until status code is 200 and then redirect to that page
- javascript - 在 forEach 中获取数组对象
- flask - 试图在烧瓶/jinja2 中标记安全
- javascript - 如何在没有纵横比假设的情况下使 iframe 响应?