我想创建一个函数,获取音频文件的URL数组,然后为每个音频对象获取其持续时间并将其添加到其相应的html元素。为什么这个循环改变每一轮的所有值
这里是我的代码:
var audio, musicArray;
musicArray = [
"https://dl.dropboxusercontent.com/u/33538012/music/music1.mp3", "https://dl.dropboxusercontent.com/u/33538012/music/music2.mp3", "https://dl.dropboxusercontent.com/u/33538012/music/music3.mp3", "https://dl.dropboxusercontent.com/u/33538012/music/music4.mp3", "https://dl.dropboxusercontent.com/u/33538012/music/music5.mp3", "https://dl.dropboxusercontent.com/u/33538012/music/music6.mp3", "https://dl.dropboxusercontent.com/u/33538012/music/music7.mp3", "https://dl.dropboxusercontent.com/u/33538012/music/music8.mp3"
];
audio = new Audio();
addDuration(musicArray);
function addDuration(array) {
var x = 1;
$.each(array, function() {
audio.src = array[x];
$(audio).on("loadedmetadata", function() { //front
$("li#row" + x).html(audio.duration);
});
});
}
HTML:
<ul>
<li class="row1"></li>
<li class="row2"></li>
<li class="row3"></li>
<li class="row4"></li>
<li class="row5"></li>
<li class="row6"></li>
<li class="row7"></li>
<li class="row8"></li>
<li class="row9"></li>
</ul>
它想表明每首歌曲的持续时间,其右html元素。例如:row1 == musicArray [1]
编辑:这个问题是完全不同的可能重复的。即使解决它的代码和方法也不同。
任何想法如何使它?
代码会随时更新'李#row1' - 因为x是始终为1 –
一旦你已经得到了'x'递增,见[JavaScript的闭包内环路 - 简单实用的例子](http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) – JJJ
它不是一个封闭的问题 - $ .each提供了一个现成的封闭 –