首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jquery访问函数/插件在不同的文件中,而不使用选择器

问jquery访问函数/插件在不同的文件中,而不使用选择器
EN

Stack Overflow用户
提问于 2012-09-22 12:39:45
回答 1查看 94关注 0票数 1

我不明白为什么我会犯这个错误:

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

档案1:

代码语言:javascript
复制
(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:

代码语言:javascript
复制
(function($) {
    $.showMessage('test','success');
})(jQuery);

注意:如果我有一个a()并使用选择器$("#messages").showMessage('test','success');,它就可以正常工作。我在某个地方读到,您总是需要返回this,但不知道如何在没有each()的情况下做到这一点。

下面的版本很好,虽然我真的需要每个并传递一个选择器吗?

代码语言:javascript
复制
$.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");
        }
   });
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-22 12:56:16

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

代码语言:javascript
复制
(function($) {
    $.showMessage = function(message, type, delay) {
      // ...
    }
})(jQuery);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12543847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档