2015-10-15 104 views
0

我需要一些關於我創建的jQuery插件的幫助。jQuery自定義函數 - this.each

$.fn.mymethod = { 
    init : function(options){ 

     this.each(function() { 
      var settings = { }; 
      if(options){ $.extend(settings, options); } 

     }); 

     return this; 
    } 
} 

$("input[type=text]").mymethod.init(); 

它似乎沒有工作,我得到一個錯誤: 類型錯誤:this.each不就行了

功能我希望有人能指出我在正確的方向。

謝謝!

+0

jQuery的枚舉對象,如數組$ .each。它也有一個.jach集合。你的'this'既不是數組也不是jQuery集合。您可以嘗試使用$ .each(this)獲取方法和其他屬性 – mplungjan

回答

0

你會想這樣做沒有對象引用的額外的水平是這樣的:

$.fn.mymethodInit = function(options){ 

     this.each(function() { 
      var settings = { }; 
      if(options){ $.extend(settings, options); } 

     }); 

     return this; 
} 

當你插嘴的方式有額外的對象,如您最初的建議,這意味着它則必須調用如:

$(...).mymethod.init() 

,並在調用它的方式,意味着該this指針mymethod,而不是你需要的是jQuery對象。這只是Javascript調用foo.bar.method()時設置this指針的結果。

有一些解決方法,但都是一般的醜陋和複雜,所以只是放棄點語法的額外級別。一個常見的解決辦法是隻使用一個共同的前綴上所有的方法:

$.fn.mymethod_Init = function() {...} 
$.fn.mymethod_Save = function() {...} 

這是因爲你試圖使用,就像唯一一個命名空間,但不建立你遇到了這個問題。

+0

您不需要')};'在末尾 –

+1

@SandeepNayak - 已經更正。 – jfriend00

+0

@ jfriend00感謝您的反饋。 – Rizo