1

我无法弄清楚为什么我会收到错误:

错误:TypeError:$.showMessage 不是函数

文件 1:

(function($) {
    $.fn.showMessage = function(message, type, delay) {
        var $messages = $("#messages");
        type = (typeof type == 'undefined') ? 'info' : type;
        delay = (typeof delay == 'undefined') ? 0 : delay;

        var message_html = '<div class="messages"><ul>' +
                                '<li class="'+ type +'">' +
                                '<p>' + message + '</p><a href="#" class="close"></a>' +
                            '</li></ul></div>';         

        if($messages.length){
            $messages.html(message_html).hide().delay(delay).fadeIn("fast");
        } else {
            $("#main h1").before(message_html).hide().delay(delay).fadeIn("fast");
        }
        return this;
    };
})(jQuery);

文件 2:

(function($) {
    $.showMessage('test','success');
})(jQuery);

注意:如果我有一个 each() 并使用一个选择器,它工作正常$("#messages").showMessage('test','success');。我在某处读到您总是需要返回,this尽管没有 each() 无法弄清楚如何做到这一点

下面的版本工作正常,虽然我真的需要 each 并传递一个选择器吗?

$.fn.showMessage = function(message, type, delay) {
   return this.each(function() {
      var $this = $(this);
        type = (typeof type == 'undefined') ? 'info' : type;
        delay = (typeof delay == 'undefined') ? 0 : delay;

        var message_html = '<div class="messages"><ul>' +
                                '<li class="'+ type +'">' +
                                '<p>' + message + '</p><a href="#" class="close"></a>' +
                            '</li></ul></div>';         

        if($this.length){
            $this.html(message_html).hide().delay(delay).fadeIn("fast");
        } else {
            $("#main h1").before(message_html).hide().delay(delay).fadeIn("fast");
        }
   });
};
4

1 回答 1

2

当您使用该构造$.fn.showMessage时,您正在声明一个名为的 jQuery 插件showMessage,该插件将作用于给定的上下文,例如$("#main").showMessage. 要声明一个可以以静态方式调用的插件,即辅助方法,您需要在命名空间之外声明它:$.fn

(function($) {
    $.showMessage = function(message, type, delay) {
      // ...
    }
})(jQuery);
于 2012-09-22T12:56:16.960 回答