JSFiddle - React, Tailwind, and code Playground

JavaScript

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

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

        $.createEventCapturing(['ended']);      
        
        
        $(function() {
            createAudElement();
            $('body').on('ended', 'audio', onEnded);
        });
                
        function onEnded(){
            alert('audio ended.');
        }
        
        function createAudElement(){
            var src = 'http://upload.wikimedia.org/wikipedia/en/f/f9/Beatles_eleanor_rigby.ogg';
            var aud = $("<audio></audio>").attr('controls', true).addClass('player').attr('src', src);                       
            aud.appendTo(document.body);
            setTimeout(aud[0].play.bind(aud[0]), 100);
            setTimeout(function(){
                aud[0].currentTime = 15;
            }, 300);
        }