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');thiseach()なしでこれを行う方法を理解することはできませんが、私はあなたが常に戻る必要があることをどこかで読みました

以下のバージョンは正常に動作しますが、本当にそれぞれが必要で、セレクターを渡す必要がありますか?

$.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 に答える