绑定到$ .jPlayer.event.error的问题

时间:2012-01-22 23:52:31

标签: javascript jquery javascript-events jplayer

我似乎无法绑定到$ .jPlayer.event.error事件,但我能够绑定到其他事件。

我正在使用Backbone视图来控制jPlayer,这是初始化函数:

initialize: function() {
    _.bindAll(this, 'render', 'get_media_url', 'on_player_error',
              'play', 'scrub', 'move_playhead', 'on_media_progress',
              'on_player_ready', 'on_player_timeupdate', 'on_player_ended',
              'set_progress_bar',  'set_current_time', 'time_from_percent');
    // set up jplayer and bind essential events to view methods, bound to the current object
    $(this.player).jPlayer(this.player_defaults);
    $(this.player).bind($.jPlayer.event.ready, _.bind(this.on_player_ready, this));
    $(this.player).bind($.jPlayer.event.timeupdate, _.bind(this.on_player_timeupdate, this));
    $(this.player).bind($.jPlayer.event.ended, _.bind(this.on_player_ended, this));
    $(this.player).bind($.jPlayer.event.progress, _.bind(this.on_media_progress, this));
    $(this.player).bind($.jPlayer.event.error, _.bind(this.on_player_error, this));
    this.current_state = this.PAUSED;
},
on_media_progress: function(event){
    $('time#total').html($.jPlayer.convertTime(event.jPlayer.status.duration));
},

on_player_error: function(event){
    alert(event);
},

(由于简洁,切断了其余的方法,但你会看到方法定义相同; on_media_progress一定会激发。on_player_error然而,NADA!)

on_player_readyon_player_timeupdateon_player_endedon_media_progress都会正确触发。

然而,

on_player_error永远不会被调用。

我只有一个MP3被传递到setMedi a,我没有安装Flash,我在Firefox 9.0.1上加载页面,但是

如果我在errorsAlert: true对象中设置this.player_defaults,jPlayer会显示它自己的错误对话框,但我的错误处理程序仍然不会触发。

就像穿着裤子的海盗船长一样,这就是我的坚果!

2 个答案:

答案 0 :(得分:0)

可能是因为存在特定的错误事件:

http://jplayer.org/latest/developer-guide/#jPlayer-event-error-codes

答案 1 :(得分:0)

答案,感谢jPlayer Google Group,答案是你需要在实例化jPlayer对象之前完成所有绑定 - 一旦实例化了错误事件已经触发,所以你无法捕获它了!

所以你需要这样做:

$(this.player).bind($.jPlayer.event.ready, _.bind(this.on_player_ready, this));
$(this.player).bind($.jPlayer.event.timeupdate, _.bind(this.on_player_timeupdate, this));
$(this.player).bind($.jPlayer.event.ended, _.bind(this.on_player_ended, this));
$(this.player).bind($.jPlayer.event.progress, _.bind(this.on_media_progress, this));
$(this.player).bind($.jPlayer.event.error, _.bind(this.on_player_error, this));
$(this.player).jPlayer(this.player_defaults);