2011-06-29 47 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

好點,我記住它 –