运行初始数组后,Jquery数组返回undefined

时间:2012-10-14 13:22:13

标签: javascript jquery arrays background

我正在尝试修复此背景推子, 它工作但它返回一些未定义的值,我无法弄清楚, 任何帮助将不胜感激。

php只是读取一个目录并获取图像文件路径然后创建隐藏的跨度,其中包含该文本。

       $(document).ready(function () {
         /* DocReady */
         var counter = 0;
         var faderImgs = new Array();
         $('span.entry').each(function () {
           var value = 'images/bg/' + $(this).text();
           faderImgs.push(value);
           $('<img />').attr('src', value).appendTo(this).css('display', 'none');
         })

         /* DocReady */

         var intId = setInterval(faderBg, 8000);
         var numItems = $('span.entry').length;

         function faderBg() {

           $('.background-fader').animate({
             'opacity': '0'
           }, 2000, function () {
             $('.background-fader').css('background-image', 'url(' + faderImgs[counter] + ')')
             $('.background-fader').animate({
               'opacity': '1'
             }, 2000)

           })
           counter++;
           if (counter > numItems) {
             var counter = 0;
           }
         }

       });

----------------------------编辑------------------ ---------------------

非常感谢帮助人员, 所有人现在都在工作。

1 个答案:

答案 0 :(得分:2)

您的计数器正在从阵列末端溢出。当等于到“numItems”时,你想把它设置回零,而不是当它更大时; JavaScript数组从零开始,因此最大的索引是numItems - 1

       counter++;
       if (counter >= numItems) { // >=, not >
         counter = 0;
       }

此外,当您将“计数器”设置为零时,您不需要var。您应该使用.prop()代替.attr()来设置您创建的<img>个元素的“src”属性。 (我不知道为什么你甚至懒得去创建它们,除非将图像预先提取到浏览器缓存中。如果是这样,就不需要在DOM中添加<img>元素 - 只需创建一个Image实例并设置其“src”属性。)

编辑 - @charlietfl正确地指出,流浪var会给您带来严重问题,因为这会导致出现本地“计数器“在内部功能中变量。事实上,如果它存在于你的真实代码中,我无法想象它是如何工作的,因为“counter”总是undefined(或者NaN我想在后增量之后。)