2012-02-29 30 views
0

我正在開發一個插件。但是,當我打電話的插件,然後它說的方法是未定義插件不在jQuery中調用

;(function($){ 

    $.dialog = { 

     defaults : { 
      ... 
     } //end of defaults 

    }; //end of $.dialog = {} 

    $.fn.extend({ 

     dialog : function(userConfig) { 

      var config = (userConfig) ?$.extend({}, $.dialog.defaults, userConfig) 
             : $.dialog.defaults; 

      config.selector = "#" + this.attr("id"); 

      $.dialog.createUI(config); 

      return this; 

     } //end of function(userConfig) 

    }); //end of $.fn.extend({}) 
    .. 
})(jQuery); 

,我叫它這樣

$(document).ready(function(){ 

    $.dialog(); 

}); //end of $(document).ready(fn) 

它說$ .dialog不是一個函數。我究竟做錯了什麼?

感謝

回答

2

我認爲你應該使用

$.extend() 

,而不是

$.fn.extend() 

,如果你想打電話給你的插件

$.dialog(); 

,而不是

$('yourselector').dialog(); 
+0

謝謝。你的意思是當我想調用選擇器時,我應該使用'$ .fn.extend()',但是如果我想簡單地調用它,那麼就不需要** $ .fn **。 – Basit 2012-02-29 11:58:24

0

難道你不想在元素選擇上調用dialog()方法嗎?例如

$("dialogContainer").dialog(); 
+0

不,我不想把它放在元素選擇器上,就像你做$(「dialogContainer」)。dialog();'一樣。我想把它叫做'$ .dialog();'或'$ .dialog({});'。 – Basit 2012-02-29 11:47:51

+0

有趣的方法。只是意味着如果你想在頁面上進行多個對話,你必須調用$ .dialog({selector:「dialog1」}); $ .dialog({selector:「dialog2」})等,而不是隻調用$(「。dialogs」)。您不能使用類名稱,因爲您的dialog()方法會強制使用ID選擇器。順便說一下,如果你有this.attr(「id」),這實際上指向什麼?因爲它不是一個元素,因此不會有一個id屬性。我不是說這是錯的,只是有趣。你採取這種方法的任何特定原因? – danwellman 2012-02-29 12:34:46

+0

:)我正在寫我的第一個插件。在這種情況下,不需要'config.selector =「#」+ this.attr(「id」);''因爲這是我的第一個插件,所以顯然我會犯錯誤:)。其實我第一次看到某人插件,在他使用的插件** $。fn **。所以這就是爲什麼我用它:)。但至少我知道這兩者之間有什麼區別,並且你指出了一件事情,我可以使用這種方法創建多個對話框:)。謝謝 – Basit 2012-02-29 12:44:00