Селектор jQuery не будет читать содержимое load () в document.ready ()? - PullRequest
0 голосов
/ 04 марта 2012

Я знаю, что вы все, вероятно, думаете, что on () - это решение, и я надеюсь на это, однако я пытался и не могу понять это.У меня есть функция jQuery, которая использует («аудио») для создания списка воспроизведения для jPlayer.Музыка делится на категории и посты. Я хочу, чтобы плеер загружал песни из постов при просмотре категорий.это выглядит так:

var songsforjplayer = [];   
    $('body').append('<div id="newsongs" style=""></div>');
    $('#newsongs').load('http://sample_post audio');

    var singlesonglist = $('audio'); //selector doesn't recognize freshly load audio so it doesnt include them inplaylist
    singlesonglist.each(function(i){
        var source = $(this).attr('src');
        songsforjplayer[i]= {
            title:  $('track',this).attr('src'),
            oga: source,
        }

        });

Я пытался использовать on () с различными типами событий - на самом деле, события нет - оно должно быть запущено, когда страница категории готова, но это не так.сделать селектор, чтобы поймать новые аудио теги.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 04 марта 2012

Проблема в том, что load () - это метод ajax.AJAX по определению является асинхронным, поэтому код вашего плеера выполняется до завершения загрузки.Вам нужно вызвать свой плагин изнутри обратного вызова успешной загрузки

var songsforjplayer = [];
$('body').append('<div id="newsongs" style=""></div>');
$('#newsongs').load(url, function() {
    /* inisde the success callback the new html exists and can now attach events */
    var singlesonglist = $('audio'); //selector doesn't recognize freshly load audio so it doesnt include them inplaylist
    singlesonglist.each(function(i) {
        var source = $(this).attr('src');
        songsforjplayer[i] = {
            title: $('track', this).attr('src'),
            oga: source,
        }

    });
});
0 голосов
/ 04 марта 2012

Каждый раз, когда вы загружаете новое аудио, вам нужно будет повторно запускать этот код, чтобы обновить список воспроизведения любым новым аудио на странице, и вам придется запускать код после завершения .load () с помощью функции завершения наметод .load ().Один из способов сделать это так:

var songsforjplayer;

function updatePlaylist() {
    songsforjplayer = [];
    var singlesonglist = $('audio');
    singlesonglist.each(function() {
        var source = $(this).attr('src');
        songsforjplayer.push({
            title:  $('track',this).attr('src'),
            oga: source
        });
    });
}

$('body').append('<div id="newsongs" style=""></div>');
$('#newsongs').load('http://sample_post audio', updatePlaylist);

Имейте в виду, что .load() является асинхронным.Это займет некоторое время, чтобы закончить, и он работает в фоновом режиме, пока ваш другой код работает.Код сразу после вызова .load() выполняется ДО завершения .load().ЕДИНСТВЕННЫЙ способ гарантировать, что часть кода выполняется ПОСЛЕ выполнения .load(), заключается в использовании функции завершения, как я показал в коде выше.

Я также удалил лишнюю запятую после oga: sourceэто было бы ошибкой в ​​более старых версиях IE.

...