2012-02-29 45 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