2011-06-29 48 views
0

我想将图像旋转器添加到我的网站,但由于某种原因,萤火虫告诉我我需要调用以启动旋转器的功能未定义。我的jQuery文件加载得很好,图像旋转脚本正在加载,所以我不知道什么是错的。该网站是heritage.newcoastmedia.com,但我会继续和发布脚本:

;(function($) { 
    $.fn.featureList = function(options) { 
     var tabs = $(this); 
     var output = $(options.output); 

     new jQuery.featureList(tabs, output, options); 

     return this;  
    }; 

    $.featureList = function(tabs, output, options) { 
     function slide(nr) { 
      if (typeof nr == "undefined") { 
       nr = visible_item + 1; 
       nr = nr >= total_items ? 0 : nr; 
      } 

      tabs.removeClass('current').filter(":eq(" + nr + ")").addClass('current'); 

      output.stop(true, true).filter(":visible").fadeOut(); 
      output.filter(":eq(" + nr + ")").fadeIn(function() { 
       visible_item = nr; 
      }); 
     } 

     var options   = options || {}; 
     var total_items  = tabs.length; 
     var visible_item = options.start_item || 0; 

     options.pause_on_hover  = options.pause_on_hover  || true; 
     options.transition_interval = options.transition_interval || 5000; 

     output.hide().eq(visible_item).show(); 
     tabs.eq(visible_item).addClass('current'); 

     tabs.click(function() { 
      if ($(this).hasClass('current')) { 
       return false; 
      } 

      slide(tabs.index(this)); 
     }); 

     if (options.transition_interval > 0) { 
      var timer = setInterval(function() { 
       slide(); 
      }, options.transition_interval); 

      if (options.pause_on_hover) { 
       tabs.mouseenter(function() { 
        clearInterval(timer); 

       }).mouseleave(function() { 
        clearInterval(timer); 
        timer = setInterval(function() { 
         slide(); 
        }, options.transition_interval); 
       }); 
      } 
     } 
    }; 
}); 

这里是开始像器的脚本:

<script language="javascript"> 
    $(document).ready(function() { 

     $.featureList(
      $("#tabs li a"), 
      $("#output li"), { 
       start_item : 1 
      } 
     ); 
    }); 
</script> 
+3

在哪一行是错误? –

+1

';(function($){'。是一个错字吗? –

+0

为什么前导分号? – justkt

回答

6

你的代码创建一个匿名函数,但没有按”叫它。

您需要在最后加上(jQuery)来调用该函数。

+0

这就是答案。用于查找类似问题的很好的工具(语义上正确的jQuery,但是像悬挂语句而不是任务)是JSLint:http://www.jslint.com/ - 它解析和分析您的代码,了解逻辑错误和糟糕的编程实践。 –

+0

但是,当我添加(jQuery)到插件的末尾,我得到另一个错误,说jQuery没有定义 })(jQuery); – user715564

+1

@user:您需要在包含jQuery之后运行脚本,而不是之前。 – SLaks

0

你不能这么做$.featureList(

参阅Chrome错误:enter image description here

该插件必须应用于对象

+0

呃?你是什​​么意思? *插件需要应用于一个对象* –

+0

其实,你可以。阅读他的插件。 – SLaks

+1

不,他在他的代码中定义了$ .featureList。问题是定义该函数的代码从未实际执行(他定义了闭包,但从不执行它)。 –

0

你只要稍微错过了正确的语法创建插件。你真正想要的是:

(function($) { 
    $.fn.featureList = function() { // etc; } 
    $.featureList = function() { // yet more etc; } 
})(jQuery); 
+1

正确的示例,但对* why *的解释会有帮助。没有最后的(jQuery),他只定义了一个闭包/函数 - 但从来没有真正执行过代码。 –

+0

好点,我记住它 –