2013-10-17 30 views
1

我正在嘗試製作我的網站的移動版本,並且jplayer的功能與我的主站點非常相似。播放列表根據您所在的頁面進行更新,除播放列表以外的所有歌曲都將從播放列表中刪除,然後該頁面將動態添加您正在查看的頁面中的歌曲。我的jplayerplaylist刪除功能不起作用

它在我的主頁上正常工作,但我的移動版本(幾乎相同的代碼)無法正常工作。

我設置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函數依賴於你何時試圖刪除它?

回答

0

論在jplayerPlaylist.remove功能jquery.playlist.js 355線,還有就是JQuery的刪除函數的調用:

$(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。

+0

顯然你可以使用回調(在某種方式):http://stackoverflow.com/questions/14105766/jquery-callback-within-the-remove-function – Jared

+0

另外jQuery的UI實際上增加它作爲回調:http://stackoverflow.com/questions/2200494/jquery-trigger-event-when-an-element-is-removed-from-the-dom – Jared

+0

@Jazza我還沒有嘗試過這些答案,但他們依靠未公開的功能。因此,他們可能會在未來的版本中打破。 – Gaurav

1

我有同樣的問題,發現jPlaylist文檔答案:http://jplayer.org/latest/demo-02-jPlayerPlaylist/

「由於第二個命令將只工作,如果刪除動畫時間,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; 
} 

希望它有幫助! 乾杯