【问题标题】:Jquery .live() not working with HTML5 Video EventsJquery .live() 不适用于 HTML5 视频事件
【发布时间】:2011-06-07 23:42:15
【问题描述】:

我在与 HTML5 视频的 ended 事件交互时遇到问题。问题是标签是使用灯箱克隆插件动态添加到页面的,我不能使用绑定来获取 ended 事件。尝试使用 live() 但这也不起作用。我当然可以将“点击”用作事件,但 play、pause 和 ended 都不起作用。尝试了 delegate,但没有成功。

代码看起来像这样(我使用了 Stackoverflow 上其他地方发布的解决方案):

$("video").live("play", function() {
    alert("It moves!");
});

使用 bind 可以达到预期的效果,但不会影响 popup 容器内的 video 标签。 HTML 是一个标准的<video> 标签,包含在一个 div 中,但如果你需要它,我可以包含它。

谁能想到一个解决方法,或者根本无法做到?我是 Jquery 的新手,所以我可能在这里遗漏了一些明显的东西。我使用的是旧版本的 Jquery (1.3.2),但也在 1.6.1 上进行了测试,但没有结果。

【问题讨论】:

标签: jquery html video live


【解决方案1】:

我认为live 方法依赖于事件冒泡。 live 方法只能捕获气泡的事件。没有标准说video 标签事件应该冒泡,所以我认为浏览器以非冒泡的方式实现这些事件。这意味着您必须 bind 您创建的每个 video 元素。

【讨论】:

    【解决方案2】:

    您可以改用delegate 方法吗?我发现这比live 更可靠。您甚至可以只使用 body 标签作为参考。

    $('body').delegate('video','play',function() {
        alert('it moves!');
    });
    

    我在jsfiddle 上整理了一个超级简单的例子,它似乎可以工作,虽然它并不是一个完整的视频标签...

    编辑:经过进一步思考,这个例子一点也不好——即使是自定义事件在被 jquery 触发时也会被触发。

    【讨论】:

    • 对不起,这对我不起作用...虽然它看起来确实应该。也许我的代码中还有其他一些我没有包括在内的东西,有必要查明问题吗?我会调查一下。谢谢你的回答!
    • 如果我使用触发器来启动事件,就像您在示例中所做的那样,您的代码确实有效。但是当它被视频播放器触发时,它不会得到事件。这有意义吗?
    • 是的 - 这很有意义。如果您触发它,甚至自定义事件也会被触发。我的错。
    猜你喜欢
    • 1970-01-01
    • 2012-11-13
    • 2011-11-07
    • 2018-08-27
    • 2019-08-06
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 2012-03-11
    相关资源
    最近更新 更多