2012-04-01 16 views
0

Ich benutze jPlayer zum Abspielen von Audiodateien. Wenn ich den Player für Inhalte verwende, die privilegiert sind, wenn die Seite geladen wird, funktioniert es ohne Probleme.jplayer + Ajax eingefügt Inhalt

Ich brauche es auch für HTML, die von AJAX eingefügt wird. Hier klappt es nicht. Es scheint, dass das bereit Ereignis nicht ausgelöst wird.

Ich schrieb eine Funktion, die von click() ausgeführt werden kann. Auf diese Weise kann ich manuell klicken, wenn der HTML-Code, der den Player enthält, vollständig geladen ist. Hier habe ich das gleiche Problem: Das Ready-Event wird nicht ausgelöst.

Dies ist meine Funktion, die Geldbusse nicht Ajax eingesetzt Spieler funktioniert:

$('.jp-jplayer').each(function() { 
    var src = $(this).attr('data-src'); 
    var id = $(this).attr('id'); 
    var post_id = $(this).attr('data-id'); 
    alert('beg'); 
    $('#' + id).jPlayer({ 
     ready: function() { 
      $(this).jPlayer('setMedia', { 
       mp3: "/prelisten/_lofidl/change_of_heart_full_lofi.mp3", 
      }); 
      alert('#' + id); 
     }, 
     swfPath: "/wp-content/themes/Dark_3Chemical_DE_mit_Pagenavi/Dark_3Chemical_DE/audioplayer/js", 
     //////ERRRROOOOOR 
     solution: "flash, html", 
     supplied: "mp3", 
     wmode: "window", 
     cssSelectorAncestor: "#jp_container_" + post_id, 
     play: function() { // To avoid both jPlayers playing together. 
      $(this).jPlayer("pauseOthers"); 
     }, 
     repeat: function (event) { // Override the default jPlayer repeat event handler 
      if(event.jPlayer.options.loop) { 
       $(this).unbind(".jPlayerRepeat").unbind(".jPlayerNext"); 
       $(this).bind($.jPlayer.event.ended + ".jPlayer.jPlayerRepeat", function() { 
        $(this).jPlayer("play"); 
        debug($(this)); 
       }); 
      } else { 
       $(this).unbind(".jPlayerRepeat").unbind(".jPlayerNext"); 
       $(this).bind($.jPlayer.event.ended + ".jPlayer.jPlayerNext", function() { 
        //$("#jquery_jplayer_4858").jPlayer("play", 0); 
       }); 
      } 
     }, 
    }); 
    $("#jplayer_inspector").jPlayerInspector({ 
     jPlayer: $('#' + id) 
    }); 
}); 

Derzeit ich die src manuell alle möglichen Fehler hier auszuschließen bin Einstellung.

Wie kann ich diese Funktion auf AJAX eingefügt Inhalt ausführen?

EDIT:

Dies ist der Code, der die HTML einschließlich der Spieler holt:

$.get('/query_posts.php', { 
    paged: _page, 
    cats: cols 
}, function(data) { 
    $('#search-results').append(data).fadeIn(300); 
    //create_player_scripts(); 
    //set_players(); 
    $('#search-results').find('input[name="cartLink"]').each(function() { 
     $(this).val($(this).closest('.post1').find('.post_headl a').attr('href')); 
    }); 
}); 
+0

Wann laufen Sie das? Nach jeder AJAX-Anfrage? Wie sieht der AJAX-Code aus? – jimw

+0

Ja. Nach der Ajax-Anfrage. Derzeit manuell, um sicher zu sein, dass es definitiv nach der Anfrage ist. Mein Ajax-Code befindet sich oben in der Bearbeitung. – user998163

+0

Ich bin mir sicher, dass Sie dies bereits überprüft haben, aber hat der HTML-Code, den Sie anhängen, definitiv die Elemente, die Sie erwarten? I.e. Sieht das eingefügte HTML genau so aus wie das HTML eines Nicht-AJAX-Players, abgesehen von verschiedenen IDs? – jimw

Antwort

3

Um eine AJAX-Seite neu geladen Arbeit machen musste ich zuerst alle Instanzen jplayer zerstören. Also habe ich eine kleine Funktion geschrieben, die alle Instanzen eines jplayer auf der Website erfasst (indem ich nach jp-audio-Klassen sucht) und jplayer('destroy'); und jplayer('clearMedia') aufruft. Diese Funktion wird in der $.ajax({ beforeSend: destroyJplayerInstances(); })

UPDATE genannt: Hier ist eine Erklärung der Entwickler von JPlayer, Mark Panaghiston: https://groups.google.com/forum/#!topic/jplayer/Q_aRhiyYvQo

Hoffnung, das hilft!