javascript - 从 jquery 中的动态内容捕获所有音频结束事件

标签 javascript jquery audio html5-audio

我见过类似的问题 - 但不能解决我的问题!

我的页面上有音频,当一个结束时,我想开始下一个,但我什至无法结束以触发...

我将代码缩减为:

function DaisyChainAudio() {
    $().on('ended', 'audio','' ,function () {
        alert('done');
    });
}

这是从我的页面/代码调用的(并被执行,设置断点显示)。

据我所知,这应该在文档级别设置处理程序,因此来自任何“音频”标签(即使是动态添加)的任何“结束”事件都应该被捕获并向我显示警报...

但它永远不会触发。

编辑

从 Çağatay Gürtürk 的建议中借用了一些东西,到目前为止有这个......

function DaisyChainAudio() {
        $(function () {
        $('audio').on('ended', function (e) {
            $(e.target).load();
            var next = $(e.target).nextAll('audio');
            if (!next.length) next = $(e.target).parent().nextAll().find('audio');
            if (!next.length) next = $(e.target).parent().parent().nextAll().find('audio');
            if (next.length) $(next[0]).trigger('play');
        });
    });
}

我仍然想在文档级别设置它,这样我就不必担心在添加动态元素时添加它...

最佳答案

试试这个:

$('audio').on('ended', function (e) {
        alert('done');
        var endedTag=e.target; //this gives the ended audio, so you can find the next one and play it.
});

请注意,当您动态创建新音频时,您应该分配事件。一个快速而肮脏的解决方案是:

function bindEvents(){
$('audio').off('ended').on('ended', function (e) {
            alert('done');
            var endedTag=e.target; //this gives the ended audio, so you can find the next one and play it.
    });
}

并在您创建/删除音频元素时运行 bindEvents。

关于javascript - 从 jquery 中的动态内容捕获所有音频结束事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29728327/

相关文章:

javascript - IP到位置使用Javascript

javascript - 通过 Javascript 播放动态嵌入的声音对象

javascript - 需要来自 JSON 的不带引号的值

javascript - 禁用缓存 YouTube 视频

javascript - 如何检测元素是否在其容器之外?

javascript - 将 lodash 的 `_.pull` 转换为普通 JS?

javascript - 如何删除字符串的某些部分

javascript - 在 ASP MVC .Net Core 中在哪里使用/放置 jQuery?

python - 如何在输入流中播放声音

Android:监听辅助端口