html5音频在元素存在之前绑定timeupdate

时间:2015-04-15 18:05:31

标签: javascript jquery html5 audio

我试图从音频标签绑定“timeupdate”事件,但尚未存在。我习惯这样做:

$("body").on("click","#selector", function(e) {

});

我用音频标签尝试了这个:

$("body").on("timeupdate", ".audioPlayerJS audio", function(e) {
    alert("test");
    console.log($(".audioPlayerJS audio").prop("currentTime"));
    $(".audioPlayerJS span.current-time").html($(".audioPlayerJS audio").prop("currentTime"));
});

但这不起作用。这应该有用吗?或者我做错了什么?

非常感谢任何帮助。

你有一个fiddel:jsfiddel

1 个答案:

答案 0 :(得分:5)

显然媒体事件(特别属于音频视频的事件,如playpausetimeupdate等)不要冒泡。你可以在this question的答案中找到相关的解释。

因此,使用他们的解决方案,我捕获了timeupdate事件,

$.createEventCapturing(['timeupdate']);  
$('body').on('timeupdate', '.audioPlayerJS audio', updateTime); // now this would work.

JSFiddle demo

事件捕获代码(取自其他SO答案):

$.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);
        }
      });
    });
  };
})();