2016-07-20 26 views
0

Ich habe einen Musik-Player auf this test page. Die externen JavaScript-Dateien, die aufgerufen werden, können über die Seitenquelle in den head-Tags angezeigt werden. Sie sindMusik Player Freezes Seite, alle Browser

/js/jquery-1.6.1min.js

/js/myplaylist.js

/plugin/ttw-music-player.js (das Skript für Kontrollkästchen Platzierung in dieser Datei gefunden wird)

Ich habe auch zwei Teile interner JavaScript enthalten:

<script type="text/javascript"> 
$(document).ready(function() { 
    var description = '<p align="center">Classic and Southern Rock<br /><i>Check the songs you want, then click the first title checked to begin playing.</p></i><br /><input type="button" onclick="uncheckAll()" value="Clear"/><input class="check" type="button" onclick="checkAll()" value="Select All"/>'; 

    $('#yipPlayer').ttwMusicPlayer(myPlaylist, { 
     autoPlay: false, 
     description: description, 
     jPlayer: { 
      swfPath: 'plugin/jquery-jplayer' 
     } 
    }); 
}); 
</script> 

und dieses Bit zum Löschen/Auswahl der Kontrollkästchen:

<script> 
function uncheckAll() { 
    $("input[type='checkbox']:checked").prop("checked", false) 
} 

function checkAll() { 
    $("input[type='checkbox']").prop("checked", true) 
} 
</script> 

Etwas zu beachten: Vor dem Hinzufügen von Kontrollkästchen angeklickt man einfach einen Titel und das Verhalten der Spieler war durch die gesamte Liste weiterhin von dem Fortschritt Songs, sofern nicht manuell pausiert. Nach dem Hinzufügen von Kontrollkästchen lädt der Player mit allen ausgewählten Kontrollkästchen. Man muss alle Felder löschen und dann die Songauswahl überprüfen. Durch Klicken auf den ersten ausgewählten Titel wird der Player gestartet. Der Spieler wird alle geprüften Songs gut durchspielen, bis das Ende des letzten Songs erreicht ist. dann wird es von neuem beginnen. Wenn Sie nicht möchten, dass die Wiedergabeliste wiederholt wird, müssen Sie die Kontrollkästchen deaktivieren. Selbst wenn nur ein Song markiert ist, wird dieser Song immer und immer wieder wiederholt. Um die Wiederholung zu stoppen, müssen Sie das Kontrollkästchen deaktivieren. (Das Verhalten des Players kann getestet werden, indem Sie auf den mitgelieferten Player-Link klicken. Sie können bis zum Ende eines Songs scrubben, damit Sie nicht vollständig durchsehen müssen.)

Das Problem tritt auf, wenn alle Kontrollkästchen deaktiviert sind. Wenn der Player bis zum Ende des Songs spielen darf, wird die Seite eingefroren. Solange der Song läuft, kann man ihn anhalten, aktivieren/deaktivieren, usw. Nur wenn keine Boxen markiert sind und ein Song komplett bis zum Ende abgespielt wird, kommt es zum Einfrieren. Wenn dies geschieht, reagiert die Seite nicht mehr auf einen Klick. Man kann nur den Seitenreiter schließen (in den meisten Fällen).

Dies geschieht unabhängig vom Browser (getestet in Firefox, Chrome, Safari, Opera). Firefox tut geben einen „Skript reagiert nicht“ Alarm mit diesen Informationen:

Script: http://yipcabbage.com/playerTest/js/jquery-1.6.1.min.js:16 (Warum ist: 16 am Ende dieser Verbindung erscheint Natürlich gibt es einen 404-Fehler.)

ich das fehlt Fähigkeiten zum Debuggen von JavaScript. Da der Skriptfehler auf jquery-1.6.1.min.js zeigt, lese ich durch this page, aber verstehe nicht die Attribute und Eigenschaften von Kontrollkästchen.

Meine Frage ist, seit der Spieler lädt zunächst mit allen Kästchen überprüft, ist es einfrieren, weil es ursprünglich eingerichtet war, durch alle im Player aufgeführten Songs zu spielen und das Deaktivieren der Checkboxen bricht diese Funktion (so dass es " weiß nicht, was zu tun ist "wenn ein Lied das Ende erreicht und nichts überprüft wird?"

Antwort

2

Das Problem tritt nur auf, wenn keine Kontrollkästchen aktiviert sind.

Kommt von dieser Funktion innerhalb/plugin/ttw-music-player.js:

function playlistNext() { 
    $cbs = $(".cb"); 
    var index = current; 
    do { 
     index = (index + 1 < myPlaylist.length) ? index + 1 : 0; 
    } while (!$cbs.eq(index).prop("checked")); 
    playlistAdvance(index); 
} 

Es in einer Endlosschleife eintritt, weil keine Option, um den $ cbs.eq (Index) .prop ("geprüft") Kriterien entsprechen.

Sie können erwägen, ein Kontrollkästchen immer aktiviert zu lassen. Oder indem Sie diese Funktion reparieren, indem Sie prüfen, ob irgendwelche Kontrollkästchen aktiviert sind.

+0

@Alexander Mitsev, können Sie dies weiter erklären: "diese Funktion zu reparieren, indem Sie prüfen, ob irgendwelche Boxen überhaupt überprüft werden"? –

+0

Ja, Sie können versuchen, '} while (! $ Cbs.eq (index) .prop (" checked "));' zu '} while (! $ Cbs.eq (index) .prop (" checked ") && index! == aktuell); '. Dies sollte es beheben. Es wird das aktuelle Lied erneut abgespielt, wenn keine anderen Lieder markiert sind ... Das ist die einfachste Lösung. –

+0

Oder fügen Sie dies am Anfang der Funktion hinzu: 'if ($ (". Cb: checked "). Length === 0) {return; } ' –