为什么这个循环会改变每一轮中的所有值
Why is this loop changing all values in each round
>我正在尝试创建一个函数来获取音频文件的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]
编辑:这个问题与可能的重复问题完全不同。 甚至解决它的代码和方法也不同。
知道如何制作吗?
只需稍
作重新排列,您的代码就可以做您想做的事
var musicArray;
musicArray = [...];
addDuration(musicArray);
function addDuration(array) {
$.each(array, function (index, src) { // index is 0...array.length - 1
var audio = new Audio(); // new audio object for each bit of audio
$(audio).on("loadedmetadata", function () { //front
$("li#row" + (index+1)).html(audio.duration); // index+1 because your li's are 1...n, and array indexes are 0...(arry.length-1)
});
audio.src = src; // add the source AFTER adding the event listener - maybe not necessary, but what if the event fires before you have a listener for it?
});
}
我在代码中添加了注释,希望这足以提供帮助
但。。。无论如何有一些解释
$.each 调用的函数使用多个参数调用
function(index, arrayitem, ...)
- 因此,您不需要在函数中使用musicArray[index]
,因为它是由arrayitem
参数提供的
李的编号是 1...9(即使你只有 8 个 URL,但这没关系(......在这种情况下,数组中的索引从 0...7 开始(8 个项目( - 因此为什么 (索引 + 1(
数组
从 0 而不是 1 开始,所以当你初始化 x=1 时,你只能从 "musicArray" 中的第 2 项访问。你的"x"永远不会改变,总是保持1,你需要在每次迭代后递增它。快速修复将是:
function addDuration(array) {
$.each(array, function(x,item) {
var audio = new Audio();
audio.src = item;
$(audio).on("loadedmetadata", function() { //front
$("li#row" + (x+1)).html(audio.duration);
});
});
相关文章:
- Javascript返回值只在循环中返回一次
- 希望日期开始结束于while循环中的一个房间id的一个数组
- For循环在Jquery中只运行一次
- 使用while循环+break是一种可接受的方式;goto;手术的结束
- 可能只在for循环内部运行一次代码块
- 有没有一种方法可以在所有嵌套循环之后放置一个标签,以便在一步中将它们全部打断
- 获取表中每行的一列的内容,然后循环访问每个内容
- 一次循环遍历一组
- 如何一次运行一次循环javascript
- 引导 2 轮播循环一次,然后停止
- 使用胡须.js一次循环访问一个测验项目
- 为什么这个循环会改变每一轮中的所有值
- 需要通过新一轮新玩家转向第一步
- 递归 JS 函数每秒错过一次循环
- 使用 javascript 一次循环播放 4 个以上的声音
- 为什么我的循环只有一次循环,即使有3个项目
- 在下一次循环迭代之前等待promise结果
- 如何知道你正处于对象for循环的最后一轮
- Jquery 一次循环和绑定 10 条记录
- JavaScript在同一循环中每x次迭代一次循环