如何增加jQuery元素ID

我有jPlayer(jquery音频播放器)的实例:jPlayer1,jPlayer2,jPlayer3,jPlayer4,每个都初始化并预装了音频文件。

下面的调用函数将遍历现有数组并添加播放预加载音频的方法。

function addPlayAudioMethodToExerciseArray(){ for (i in qaArray){ qaArray[i].playAnswer = function(){ $('#jPlayer'+i).jPlayer('play',0);} } } 

除了部分(’#jPlayer’+ i)没有被评估成为(’#jPlayer1’),(’#jPlayer2’)等之外,它创建了方法。

提前谢谢了。 注意:我是菜鸟。

问题是所有那些“playAnswer”函数都包含在同一个“i”变量中。 也就是说,只有一个“我”(在这种情况下,因为你没有用var声明它,它是全局的!)。

你需要做的是使用另一个函数为每个回调提供一个单独的“i”。

 function addPlayAudioMethodToExerciseArray(){ function makePlayerCallback(i) { return function() { $('#jPlayer' + i).jPlayer('play', 0); }; } for (var i = 0; i < qaArray.length; ++i){ qaArray[i].playAnswer = makePlayerCallback(i); } } 

“makePlayerCallback”函数有自己的参数“i”,它实际上是函数的本地参数,将导致回调函数分别拥有自己的“i”。 每次调用该函数都会在返回的回调函数周围创建所谓的“闭包”。 (请注意,我的循环从零开始;如果HTML中的标识符从1开始,则需要通过在某处添加1来解释该问题。感谢@DieVarDump获取该注释。)

请注意,我在循环中使用var声明“i”使其成为“addPlayAudioMethodToExerciseArray”的本地(男孩,这是一个很长的函数名称;我希望你不必经常输入它:-)。 此外,我使用它作为数字索引,假设“qaArray”实际上是一个诚实的gosh数组,而不仅仅是n个对象。 对数组使用数字索引是一种很好的做法。

使用colsures

试试这个 :

  for(i in qaArray) { qaArray[i].playAnswer = function (num) { return function () { $('#jPlayer' + num).jPlayer('play', 0); } ; }(i) };