我的jplayerplaylist删除功能无法正常工作

时间:2013-10-17 23:57:46

标签: javascript jquery html jplayer

我试图制作我网站的移动版本,而jplayer功能与我的主网站非常相似。根据您所在的页面更新播放列表,从播放列表中删除除当前正在收听的歌曲之外的所有歌曲,然后页面动态添加您正在查看的页面中的歌曲。

它在我的主页面上运行正常,但我的移动版本(几乎是相同的代码)无效。

我设置jplayer_playlist.option("removeTime", 0);就像jplayer文档建议的那样,但它不起作用。这是我的一些代码,所以你可以看到我正在做的事情。

    function reload()
    {
        var current = jplayer_playlist.current;

        for(var i = 0; i < current; i++)
        {
            deleteSong(0);
        }
        var length = theTitles.length;
        for(var i = 0; i < (length - 1); i++)
        {
            deleteSong(1);
        }
    }

    function deleteSong(index)
    {
        if(!jplayer_playlist.remove(index))
        {
            console.log("Could not delete it.");
        }
    }

第一次删除不会显示错误消息,但第二次删除(以及之后的每次删除)都会显示错误消息。好像它没有意识到我将removeTime设置为0,即使我做了(并且在进行任何删除调用之前)。除了removeTime之外,当你试图从中删除某些内容时,jplayer.remove函数还有什么依赖吗?

1 个答案:

答案 0 :(得分:0)

在jplayerPlaylist.remove函数的jquery.playlist.js的第355行,调用了JQuery的remove函数:

$(this).remove();

如果查看JQuery的source,则会将其委托给DOM方法

elem.parentNode.removeChild( elem );

在现代浏览器中,这个DOM操作是异步的,即它立即返回,但实际上删除DOM元素需要时间。因此,jplayerPlaylist.remove()方法在实际删除节点之前返回。不幸的是,没有回调。所以唯一的解决方法是setTimeout。

var DELAY = 10;
function reload()
{
    var current = jplayer_playlist.current;
    var length = jplayer_playlist.playlist.length;
    if (current > 0)
        deleteSong(0);
    else if (length > 1)
        deleteSong(1);
    if (length > 1)
        window.setTimeout(reload, DELAY);
}

您可能需要调整DELAY。