2013-06-13 77 views
0

我有麻煩提供我的插件與公共職能,排序什麼jQueryUI我認爲。我的插件代碼如下。簡單的公共函數在簡單的jQuery插件

$("#someField").myPlugin({'editable':true});把它叫做遍歷指定的元素,在這種情況下,只有一個#someField並設置amount爲0

然後從某處代碼,我想打電話給公共職能set10會影響元素#someField我傳遞給插件以前。

因此,當通過switch語句調用$("#someField").myPlugin("set10");時,它將設置爲10.現在,但是當我點擊該字段並執行click內部的代碼時,它將再次顯示爲0。

我不明白爲什麼這不起作用。我認爲在相同的DOM元素上調用.myPlugin會保持數量的值,但顯然我在這裏丟失了重要的東西。將不勝感激任何幫助和解釋。

(function($) 
    { 
     $.fn.myPlugin=function(options) { 


      // default settings 

      var settings = $.extend({ 
       'editable': true     
      }, options); 

      return this.each(function() 
      { 
       var amount=0; 

       switch(options) 
       { 
        case "set10": 
         set10(); 
       } 

       var t=$(this); 

       function set10() 
       {   
        amount=10; 
       } 

       t.on("click", function(e) 
       { 
        console.log(amount); 
       }); 

      }); 
     }; 

    })(jQuery) 

    $("#someField").myPlugin({'editable':true}); 
    $("#someField").myPlugin("set10"); 

編輯:

具有不同的圖案細看之後,我放在一起的東西,似乎工作。它幾乎跟你描述的一樣,但是請讓我知道我的方法是否有什麼可怕的錯誤。基本上它通過jQuerys data方法將我需要的數據附加到HTML元素本身。然後,當函數被調用時,它會檢查選項是否實際上是一個字符串,並在每個循環中當前具有的特定DOM元素的上下文中調用適當的方法。這是公共方法如何實現的簡化版本?就像我說的那樣,它在我的插件中起作用,但是我想正確地做,並且擔心我的問題還存在一些問題。

(function($) 
{ 
    $.fn.myPlugin=function(options) { 

     // default settings 

     var settings = $.extend({ 
      'editable': true     
     }, options); 

     return this.each(function() 
     { 
      if(typeof options == 'string') 
      { 
       switch(options) 
       { 
        case "set10": 
        { 
         set10.call(this); 
         return; 
        } 
       } 
      } 

      var amount=0; 

      var t=$(this); 

      function set10() 
      {   
       var t=$(this); 

       amount=10; 

       $.data(t[0],"amount",amount); 
      } 

      t.on("click", function(e) 
      { 
       if($.data(t[0],"amount")) 
        amount = $.data(t[0],"amount",amount); 
       console.log(amount); 
      }); 

     }); 
    }; 

})(jQuery) 

回答

0

默認情況下,jQuery插件不留在每一個電話持續。你在這裏做的是重新初始化整個插件兩次,每個聲明都是一個全新的對象,它不知道任何以前的聲明。

如果您想將其作爲JQuery插件來完成,恐怕您可能需要徹底重新考慮您的解決方案。一般來說,外部函數是由作爲選項和/或事件傳遞的回調觸發的。您也可以使用.data()函數(創建數據 - dom對象本身的任何屬性)在DOM元素之間傳遞數據。