音乐播放器冻结页面,所有浏览器

时间:2016-07-20 12:30:52

标签: jquery checkbox freeze audio-player

我在this test page上有一个音乐播放器。可以通过head标记内的页面源查看所调用的外部JavaScript文件。他们是

/js/jquery-1.6.1min.js

/js/myplaylist.js

/plugin/ttw-music-player.js (放置复选框的脚本可在此文件中找到)

我还有两部分内部JavaScript:

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

此位用于清除/选择复选框:

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

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

需要注意的事项:在添加复选框之前,只需点击一个标题,播放器的行为就是继续在整个歌曲列表中前进,除非手动暂停。添加复选框后,播放器会加载所有选中的复选框。必须清除所有框,然后检查歌曲选择。单击第一个选定的标题然后启动播放器。播放器将完全检查所有已检查的歌曲,直到它到达最后一首歌的结尾;那么它将重新开始。如果您不希望它继续重复播放列表,则必须取消选中复选框。即使只检查了一首歌,它也会一遍又一遍地重复那首歌。要停止重复,您必须取消选中该框。 (可以通过单击提供的播放器链接来测试播放器的行为。您可以擦洗到歌曲的末尾,以避免必须完全坐下。)

当取消选中所有复选框时会出现此问题。 如果允许播放器一直播放到歌曲的结尾,页面将会冻结。只要正在播放歌曲,就可以暂停它,选中/取消选中复选框等。只有当没有选中复选框并且歌曲完全播放到结束时才会发生冻结。发生这种情况时,页面不再响应任何点击。人们可能只关闭页面标签(在大多数情况下)。

无论浏览器如何(在Firefox,Chrome,Safari,Opera中测试)都会发生这种情况。 Firefox确实提供了一个&#34;无响应的脚本&#34;提醒此信息:

脚本:http://yipcabbage.com/playerTest/js/jquery-1.6.1.min.js:16(为什么:16出现在该链接的末尾?当然,它会出现404错误。)

我缺乏调试JavaScript的技能。由于脚本错误指向jquery-1.6.1.min.js,因此我通读this page但不了解复选框的属性和属性。

我的问题是,由于播放器最初加载了所有选中的复选框,它是否会冻结,因为它最初设置为播放播放器中列出的所有歌曲,取消选中复选框会中断该功能(以便它&# 34;不知道该做什么&#34;当一首歌到达终点并且没有任何内容被检查时)?

1 个答案:

答案 0 :(得分:2)

只有在没有检查复选框时才会出现问题。

来自/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);
}

它进入一个无限循环,因为没有复选框符合$ cbs.eq(index).prop(&#34; checked&#34;)标准。

您可以考虑始终选中一个复选框。或者通过检查是否检查任何方框来修复该功能。