Основная причина этой проблемы состоит в том, что реализация списка воспроизведения связывает себя с событием 'закончено' перед нашим связыванием .
Таким образом, решение будетпривязать наш код перед кодом списка воспроизведения.
В следующем ответе: jQuery слушатель события привязки перед другим мы можем найти следующую реализацию для метода preBind:
$.fn.preBind = function (type, data, fn) {
this.each(function () {
var $this = $(this);
$this.bind(type, data, fn);
var currentBindings = $._data(this, 'events')[type];
if ($.isArray(currentBindings)) {
currentBindings.unshift(currentBindings.pop());
}
});
return this;
};
После добавления этой предварительной привязки мы можем сделать следующее в обработчике jPlayer 'ready':
$("#jquery_jplayer_1")
.preBind($.jPlayer.event.ended, function(e) {
var cur = $('.jp-playlist').find('li.jp-playlist-current'),
ix = cur.index(),
is_last = cur.next().get().length == 0;
console.log('ended index=' + ix + ', is_last=' + is_last);
});