【问题标题】:html5 audio bind timeupdate before element exists元素存在之前的html5音频绑定时间更新
【发布时间】:2015-06-21 20:21:11
【问题描述】:

我试图从一个尚不存在的音频标签绑定“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"));
});

但这不起作用。这应该工作吗?还是我做错了什么?

非常感谢任何帮助。

有一个适合你的:jsfiddel

【问题讨论】:

  • 看起来最简单的解决方案是在动态添加音频后声明事件处理程序。您只能在audiovideo 上检测timeupdate(所以不能在body 上)并且.on('load' 不适合委托事件,以便检测新音频何时加载。或者只是可能创建一个自定义事件:stackoverflow.com/a/11886423/3168107.

标签: javascript jquery html audio


【解决方案1】:

显然媒体事件(那些专门属于 audiovideo 的事件,例如 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);
        }
      });
    });
  };
})();

【讨论】:

  • 感谢回复,我稍后再查
  • 我收到此错误:“未捕获的 TypeError: ((jQuery.event.special[handleObj.origType] || (中间值)).handle || handleObj.handler).apply 不是函数"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
  • 2011-11-06
  • 2019-10-21
  • 1970-01-01
  • 2021-11-15
  • 2023-04-10
相关资源
最近更新 更多