2013-04-11 43 views
0

這是我第一次開發一個jQuery插件。基本上我只是寫這個來將函數合併在一起,使得這些函數更容易使用,就像用方法編寫類一樣。jQuery自定義插件,保持與選定項目相關的設置變量?

我遇到的麻煩是,在對元素使用我的jQuery命令之後 - 該函數內的所有信息都會丟失,我不能將其用於以後使用。我想用插件作爲類的一種,函數作爲方法。我想將Raphael創建的對象保存在其中,如果需要,稍後再操作它們。這是我的例子:

(function($) { 
    $.fn.myPlugin = function(step) { 
     if(step == 'step1') { 
      var test = 'Function OK!'; 
      console.log(test); 
     } 
     if(step == 'step2') { 
      console.log(test); 
     } 
    } 
})(jQuery); 

$('#elem').myPlugin('step1'); 
$('#elem').myPlugin('step2'); 

課程的第一控制檯日誌打印出變量,但是第二返回undefined。

有沒有辦法讓jQuery作爲一個自我依賴的類,有閉合變量?正如我所提到的,我想創建Raphael對象並稍後操作它們。所以我需要將Raphael對象分配給一個變量(var graph = Raphael('#elem', options);),所以稍後我需要通過調用一個函數來訪問它,例如graph.somefunction(doThis);

我該怎麼做?難道我做錯了什麼?謝謝..

回答

3

將數據存儲在每個元素上。

$.fn.myPlugin = function(step){ 

    return this.each(function(){ 
     var $elem = $(this); 
     if(step == 'step1') { 
      $elem.data('test','Function OK!'); 
      console.log('step1',this.id,$elem.data('test')); 
     } 
     if(step == 'step2') { 
      console.log('step2',this.id,$elem.data('test')); 
     } 
    }); 

}; 

$('#elem').myPlugin('step1').myPlugin('step2'); 

它現在同時支持多個元素,每次都有不同的步驟進度。

$('#elem1').myPlugin('step1'); 
$('#elem2').myPlugin('step1').myPlugin('step2'); 
$('#elem1').myPlugin('step2'); 

http://jsfiddle.net/FaaBV/

相關問題