音频事件不会在播放事件上触发 jQuery

Posted

技术标签:

【中文标题】音频事件不会在播放事件上触发 jQuery【英文标题】:Audio event does not trigger jQuery on play event 【发布时间】:2015-11-08 13:47:39 【问题描述】:

我尝试在音频play 事件上执行一个函数:

jQuery('audio').on('play', function ()  /* ... */ );

但是我的元素在这个函数执行时不存在,所以它没有被选中。相反,当我需要为动态添加的内容触发事件时,我习惯使用不同的语法:

jQuery('.constant-container').on('play', 'audio', function () 
    /* ... */ 
);

.constant-container 不变的地方。 但是这个解决方案似乎不起作用,音频元素也没有得到任何click 事件。

这是link to the bin。

前 4 个音频正确处理事件,但不是最后 4 个。

【问题讨论】:

【参考方案1】:

显然媒体事件(那些专门属于 audiovideo 的事件,如 playpausetimeupdate 等)不会冒泡。您可以在this question 的答案中找到对此的解释。

所以使用他们的解决方案,我捕获了play 事件,

jQuery.createEventCapturing(['play']);  
jQuery('body').on('play', 'audio', function()... // now this would work.

JS Bin demo

事件捕获代码(取自另一个 SO 答案):

    jQuery.createEventCapturing = (function () 
        var special = jQuery.event.special;
        return function (names) 
            if (!document.addEventListener) 
                return;
            
            if (typeof names == 'string') 
                names = [names];
            
            jQuery.each(names, function (i, name) 
                var handler = function (e) 
                    e = jQuery.event.fix(e);

                    return jQuery.event.dispatch.call(this, e);
                ;
                special[name] = special[name] || ;
                if (special[name].setup || special[name].teardown) 
                    return;
                
                jQuery.extend(special[name], 
                    setup: function () 
                        this.addEventListener(name, handler, true);
                    ,
                    teardown: function () 
                        this.removeEventListener(name, handler, true);
                    
                );
            );
        ;
    )();

【讨论】:

以上是关于音频事件不会在播放事件上触发 jQuery的主要内容,如果未能解决你的问题,请参考以下文章

音频标签的 Html5 延迟“onplay”事件处理程序?

jQuery 不会在禁用按钮上触发悬停事件吗?

尝试在鼠标悬停事件上播放 HTML5 音频

以编程方式在音频元素上设置当前 Date 属性会导致事件侦听器无限期触发

jquery click 事件不会在 iPhone 中的按钮元素上触发

HTML5/Javascript/jQuery 音频播放器不响应事件?