Jquery .live() 无法与 HTML5 视频事件配合使用

6
我在使用HTML5视频的ended事件时遇到了问题。问题是使用一个lightbox-clone插件动态添加标签到页面上,我无法使用bind来获取ended事件。尝试使用live()也没有用。我可以使用"click"作为事件,但是既不是playpause也不是ended能够起作用。尝试使用delegate,但那也没起作用。
代码大致如下(我使用了Stackoverflow上别人发布过的解决方案):
$("video").live("play", function() {
    alert("It moves!");
});

使用bind方法确实有所作用,但它并不影响弹出容器中的视频标签。HTML代码是一个包含在
标签中的标准

玩是一个“官方”的活动吗? - ave4496
它符合w3c规范:http://www.w3.org/TR/html5/video.html#event-media-play,并且可以在绑定时工作(当播放按钮被按下时触发)。 - Nico
你可以在这里找到答案:https://dev59.com/7Ggu5IYBdhLWcg3wfHA_ - T. Junghans
2个回答

6

我认为live方法依赖于事件冒泡。只有冒泡的事件才能被live方法捕获。目前没有标准规定video标签的事件应该冒泡,因此我认为浏览器以非冒泡方式实现这些事件。这意味着您必须为每个创建的video元素绑定事件。


0
你可以使用代理方法delegate吗?我发现它比live更可靠。你甚至可以只使用标签作为参考。
$('body').delegate('video','play',function() {
    alert('it moves!');
});

我在 jsfiddle 上放置了一个超级简单的示例,似乎运行良好,尽管它不是真正的完整视频标签...

编辑:经过进一步思考,这个示例一点也不好 - 甚至自定义事件在被 jquery 触发时也会触发。


抱歉,这对我不起作用...尽管看起来应该可以。也许我的代码中还有其他东西没有包含,必须精确找到问题所在?我会研究一下。谢谢你的回答partkyle! - Nico
如果我使用触发器来启动事件,就像你在示例中所做的那样,你的代码确实可以工作。但是当它被视频播放器触发时,它无法获取事件。这有意义吗? - Nico
是的 - 这很有道理。即使您触发自定义事件,它也会被触发。我的错误。 - partkyle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接