2013-07-16 94 views
2

我已經創建了一個帶有ul的音頻元素。 ul是鏈接到不同歌曲的列表項目。當單擊該項目時,我已經獲得了該歌曲的改變,並且它可以工作,但是我希望當前播放的歌曲結束時該歌曲也會改變。下面是我的html和js。HTML5音頻標籤完成後更改源。 jQuery

HTML:

<div id="mp3_player"> 
    <div id="audio_box"> 
     <audio id="audioPlayer" preload="auto" src="" controls="controls"></audio> 
    </div> 
</div> 

<ul id="songSelector"> 
    <a href="song1.mp3"><li>song1</li></a> 
    <a href="song2.mp3"><li>song2</li></a> 
    <a href="song3.mp3"><li>song3</li></a> 
    <a href="song4.mp3"><li>song4</li></a> 
</ul> 

源不具有值具有因它是在我的腳本的另一部分加入。

JS:當歌曲結束時,它應該返回下一個li元素鏈接

$(audio).bind('ended', function() { 
    var testing = $('#songSelector').next().attr('href'); 
    alert(testing); 
}) 

警報返回undefined。我只是無法弄清楚我做錯了什麼。

謝謝先進。

+0

你知道你的HTML無效,對吧?你不能在'A'裏面裹上'LI' –

+0

@Roko C. Buljan是的,我知道這只是爲了讓我的生活變得更容易,但是我改變了它,所以沒有A標籤。 – VizuaaLOG

回答

1

現在,$('#songSelector').next()將在#songSelector之後的任何內容中。您可能需要跟蹤另一個變量中的哪個「當前」。

var currentSong = $('#songSelector').find('a:first'); 
$(audio).bind('ended', function() { 
    var next = currentSong.next(); 
    if (next.length) { 
     currentSong = next; 
    } else { 
     /* uncomment this if you want it to loop back to the beginning */ 
     // currentSong = $('#songSelector').find('a:first'); 
    } 
    var testing = currentSong.attr('href'); 
    alert(testing); 
}); 

然後你只需要在你的click處理程序來更新currentSong爲好。

+0

對不起所有的問題,但我是新來的js :)。有沒有一種方法可以將一個「活動」類添加到currentSong元素,以便用戶知道該歌曲改變了什麼。當點擊和改變歌曲時,我得到了這個工作,但當它自動改變時我無法工作。對不起:) – VizuaaLOG

+0

這不是問題。因爲jQuery的鏈接,你可以這樣做: 'VAR測試= currentSong.addClass( '激活')ATTR( 'href' 屬性);' 並在開頭部分 'VAR下一= currentSong.removeClass( 'active')。next();' 希望這至少能讓你走上正軌。 – kalley

+0

我剛剛注意到它在第一首和第二首歌曲之間起作用,然而它只是重複列表中的第一首歌曲。上面的答案似乎也不起作用。我必須重寫程序到jquery,因爲目前它是jquery和原生js所以:(謝謝你的幫助,我會看到我是怎麼做的:) – VizuaaLOG