2016-07-20 4 views
0

J'ai un lecteur de musique sur this test page. Les fichiers JavaScript externes demandés peuvent être consultés via la source de la page dans les balises de tête. Ils sontLecteur de musique fige la page, tous les navigateurs

/js/jquery-1.6.1min.js

/js/myplaylist.js

/plugin/ttw-music-player.js (le script pour placer des cases à cocher est trouvé dans ce fichier)

J'ai aussi deux parties de JavaScript internes inclus:

<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> 

et ce bit pour la compensation/sélection des cases à cocher:

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

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

Quelque chose à noter: Avant d'ajouter des cases à cocher, un simple cliqué sur un titre et le comportement du joueur était de continuer à progresser dans la liste complète des chansons, à moins d'une pause manuelle. Après avoir ajouté des cases à cocher, le lecteur se charge de toutes les cases cochées. Il faut effacer toutes les cases, puis vérifier les choix de chanson. Cliquez sur le premier titre sélectionné puis commence le lecteur. Le joueur progressera à travers toutes les chansons vérifiées juste bien, jusqu'à ce qu'il atteigne la fin de la dernière chanson; alors il va recommencer. Si vous ne voulez pas répéter la liste de lecture, vous devez décocher les cases. Même avec une seule chanson cochée, elle répétera cette chanson, encore et encore. Pour arrêter la répétition, vous devez décocher la case.

(Vous pouvez frotter à la fin d'une chanson pour éviter d'avoir à s'asseoir dans son ensemble. Le comportement du joueur peut être testé en cliquant sur le lien lecteur fourni.) Le problème se produit lorsque toutes les cases ne sont pas cochées. Si le joueur est autorisé à jouer jusqu'à la fin de la chanson, la page va se bloquer. Tant que la chanson est en cours de lecture, on peut la mettre en pause, cocher/décocher les cases, etc. C'est seulement quand aucune case n'est cochée et qu'une chanson joue complètement jusqu'à la fin que le gel se produise. Lorsque cela se produit, la page ne répond plus à aucun clic. On peut seulement fermer l'onglet de la page (dans la plupart des cas).

Cela se produit quel que soit le navigateur (testé dans Firefox, Chrome, Safari, Opera). Firefox ne donne une alerte « Unresponsive Script » avec cette information:

Script: http://yipcabbage.com/playerTest/js/jquery-1.6.1.min.js:16 (Pourquoi: 16 apparaissant à la fin de ce lien Bien sûr, il donne une erreur 404.)

Je manque compétences pour déboguer JavaScript. Puisque l'erreur de script pointe vers jquery-1.6.1.min.js, je lis this page mais je ne comprends pas les attributs et les propriétés des cases à cocher. Ma question est, puisque le lecteur se charge initialement avec toutes les cases cochées, est-ce qu'il gèle parce qu'il a été initialement configuré pour jouer à travers toutes les chansons listées dans le lecteur et désélectionner les cases à cocher cette fonction (de sorte que ne sait pas quoi faire "quand une chanson arrive à la fin et rien n'est vérifié"?

Répondre

2

Le problème survient uniquement lorsqu'aucune case à cocher n'est cochée.

Provient de cette fonction à l'intérieur/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); 
} 

Il entre dans une boucle infinie car aucune case correspond aux critères .prop ("checked") cbs.eq de $ (indice).

Vous pouvez envisager de laisser une case à cocher toujours cochée. Ou fixer cette fonction en vérifiant si des cases sont cochées.

+0

@Alexander Mitsev, pouvez-vous expliquer plus loin ceci: "réparer cette fonction en vérifiant si des boîtes sont vérifiées du tout"? –

+0

Oui, vous pouvez essayer de changer}} while (! $ Cbs.eq (index) .prop ("checked")); 'à'} while (! $ Cbs.eq (index) .prop ("checked") && index! == courant); '. Cela devrait le réparer. Il jouera à nouveau la chanson en cours s'il n'y a pas d'autres chansons cochées ... C'est la solution la plus facile. –

+0

Ou ajoutez ceci au début de la fonction: 'if ($ (". Cb: checked "). Length === 0) {return; } ' –