JQuery-for循环中的loadedmetadata侦听器

JQuery-for循环中的loadedmetadata侦听器,jquery,html,loops,audio,listener,Jquery,Html,Loops,Audio,Listener,我正在尝试创建一个循环,以获取从jQuery中的数组中获取的不同音频曲目的持续时间。似乎在循环中添加事件侦听器会覆盖for的第二条语句,从而无限循环并导致浏览器崩溃 代码如下: var trackSources = new Array(); trackSources[0] = "music/haken.mp3"; trackSources[1] = "music/Drive home.mp3"; trackSources[2] = "music/Luminol.mp3"; var audioP

我正在尝试创建一个循环,以获取从jQuery中的数组中获取的不同音频曲目的持续时间。似乎在循环中添加事件侦听器会覆盖for的第二条语句,从而无限循环并导致浏览器崩溃

代码如下:

var trackSources = new Array();
trackSources[0] = "music/haken.mp3";
trackSources[1] = "music/Drive home.mp3";
trackSources[2] = "music/Luminol.mp3";

var audioPlaylist = document.createElement("audio");
audioPlaylist.preload = "metadata";

function getDurations() {

    var max = trackSources.length;

    for (var i=0; i < max ; )
    {
        audioPlaylist.src = trackSources[i];

        audioPlaylist.addEventListener('loadedmetadata', function() {
            trackDuration= audioPlaylist.duration;
            alert(trackDuration);
            i++;
        }, false);

    }

}
var trackSources=new Array();
trackSources[0]=“music/haken.mp3”;
trackSources[1]=“music/Drive home.mp3”;
trackSources[2]=“music/Luminol.mp3”;
var audioPlaylist=document.createElement(“音频”);
audioPlaylist.preload=“元数据”;
函数getDurations(){
var max=trackSources.length;
对于(变量i=0;i
有办法解决吗?谢谢

您可以尝试以下方法:

<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
var trackSources = new Array();
trackSources[0] = "music/haken.mp3";
trackSources[1] = "music/Drive home.mp3";
trackSources[2] = "music/Luminol.mp3";

var trackDuration = new Array();

var audioPlaylist = document.createElement("audio");
audioPlaylist.preload = "metadata";
var i = 0;

function getDurations() {
console.log('getDurations called');
var arraySize = trackSources.length;
if(i < arraySize){
    $(audioPlaylist)[0].src = trackSources[i];
    $(audioPlaylist).on('loadedmetadata',function(){
        trackDuration[i]= $(audioPlaylist)[0].duration;
        console.log('Track '+i+' - duration: '+trackDuration[i]+' seconds');
        i++;
        $(this).off('loadedmetadata');
        getDurations();
    });
}
}
getDurations();
</script>

var trackSources=新数组();
trackSources[0]=“music/haken.mp3”;
trackSources[1]=“music/Drive home.mp3”;
trackSources[2]=“music/Luminol.mp3”;
var trackDuration=新数组();
var audioPlaylist=document.createElement(“音频”);
audioPlaylist.preload=“元数据”;
var i=0;
函数getDurations(){
log('getDurations called');
var arraySize=trackSources.length;
如果(i
附带说明:您提到了jQuery,但您的问题代码是纯JS