如何增加jQuery元素ID



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

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

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

除了部分('#jPlayer'+i)未评估为('#jPlayer1')、('#j Player2')等之外,它创建的方法正常。

非常感谢。注:我是个笨蛋。

问题是所有这些"playAnswer"函数都围绕着同一个"i"变量。也就是说,只有一个"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"实际上是一个诚实的数组,而不仅仅是n对象。对数组使用数字索引是一种很好的做法。

使用

试试这个:

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

最新更新