如何增加jQuery元素ID

时间:2012-01-28 14:18:17

标签: javascript jquery increment

我有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')等。

非常感谢提前。 注意:我是菜鸟。

2 个答案:

答案 0 :(得分:2)

问题是所有那些“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个对象。对数组使用数字索引是一种很好的做法。

答案 1 :(得分:0)

使用 colsures

试试这个:

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