Javascript My jplayerplaylist remove函数不是';行不通

Javascript My jplayerplaylist remove函数不是';行不通,javascript,jquery,html,jplayer,Javascript,Jquery,Html,Jplayer,我正在尝试为我的站点制作一个移动版本,而jplayer的功能与我的主站点非常相似。播放列表会根据您所处的页面进行更新,并从播放列表中删除除您当前正在收听的歌曲以外的所有歌曲,然后该页面会动态添加您正在查看的页面中的歌曲 它可以在我的主页上正常工作,但是我的手机版本(几乎是相同的代码)不能在上面工作 我设置了播放列表选项(“removeTime”,0)就像jplayer文档所建议的那样,但它不起作用。这是我的一段代码,你可以清楚地看到我在做什么 function reload()

我正在尝试为我的站点制作一个移动版本,而jplayer的功能与我的主站点非常相似。播放列表会根据您所处的页面进行更新,并从播放列表中删除除您当前正在收听的歌曲以外的所有歌曲,然后该页面会动态添加您正在查看的页面中的歌曲

它可以在我的主页上正常工作,但是我的手机版本(几乎是相同的代码)不能在上面工作

我设置了播放列表选项(“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.");
        }
    }
函数重载()
{
var current=jplayer\u playlist.current;
对于(var i=0;i
第一次删除不会显示错误消息,但第二次(以及之后的每次删除)会显示错误消息。似乎它没有意识到我将
removeTime
设置为0,即使我这样做了(在进行任何删除调用之前)。除了removeTime之外,当您试图从jplayer.remove函数中删除某些内容时,还有什么是jplayer.remove函数所依赖的吗?

在jplayerPlaylist.remove函数的第355行,有一个对JQuery的remove函数的调用:

$(this).remove();
如果查看JQuery的目录,这将委托给DOM方法

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

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);
}
您可能需要调整延迟。

在jplayerPlaylist.remove函数的第355行,有一个对JQuery的remove函数的调用:

$(this).remove();
如果查看JQuery的目录,这将委托给DOM方法

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

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);
}

您可能需要调整延迟。

我也遇到了同样的问题,并在jPlaylist文档中找到了答案:

因为第二个命令仅在移除动画时间removeTime为零时有效

在我的例子中,我对以下功能进行了编码,以删除当前歌曲之前的所有歌曲:

创建jPlaylist时:

var playlistOptions = {
playlistOptions: {
    enableRemoveControls: true,
    autoPlay: false,
    removeTime: 0
},
...
};
playlist = new jPlayerPlaylist(.......);
以及清除歌曲的功能:

function deleteUpToCurrent(e) {
    while(playlist.current != 0) {
        playlist.remove(0); 
    }
    return false;
}
希望有帮助!
干杯

我遇到了同样的问题,并在jPlaylist文档中找到了答案:

因为第二个命令仅在移除动画时间removeTime为零时有效

在我的例子中,我对以下功能进行了编码,以删除当前歌曲之前的所有歌曲:

创建jPlaylist时:

var playlistOptions = {
playlistOptions: {
    enableRemoveControls: true,
    autoPlay: false,
    removeTime: 0
},
...
};
playlist = new jPlayerPlaylist(.......);
以及清除歌曲的功能:

function deleteUpToCurrent(e) {
    while(playlist.current != 0) {
        playlist.remove(0); 
    }
    return false;
}
希望有帮助!
干杯

显然你可以使用回调(在某种程度上):jqueryui实际上也将其添加为回调:@Jazza我没有尝试过这些答案,但它们依赖于未记录的功能。因此,它们可能会在未来的版本中崩溃。显然,您可以使用回调(某种程度上):jQuery UI实际上也将其添加为回调:@Jazza我没有尝试过这些答案,但它们依赖于未记录的功能。因此,它们可能会在未来的版本中中断。