Javascript 初始化插件后如何调用jquery插件内部的函数

Javascript 初始化插件后如何调用jquery插件内部的函数,javascript,jquery,jquery-plugins,Javascript,Jquery,Jquery Plugins,我正在创建我自己的jQuery插件,它可以分配给文档中的多个元素。我想,在一些事件中,为那个特定的元素调用插件内部的函数,但一切都让我抓狂。插件本身可以工作,但外部调用存在问题 简单插件: (function ( $ ) { $.fn.myPlugin = function (options) { var settings = $.extend({ someOption: "" }, options); return

我正在创建我自己的jQuery插件,它可以分配给文档中的多个元素。我想,在一些事件中,为那个特定的元素调用插件内部的函数,但一切都让我抓狂。插件本身可以工作,但外部调用存在问题

简单插件:

(function ( $ ) {
    $.fn.myPlugin = function (options) {
        var settings = $.extend({
            someOption: ""
        }, options);
        return this.each(function () {
            _init();
            _load();
        });
        function _init() {
            //some action..
        }
        function _load() {
            //some action..
        }
    };
    $.fn.myPlugin.reload = function () {
        _load(); //or this._load();
    }
}( jQuery ));
和html格式:

<div id="div1"></div>
<button id="button1">Click to reload</div>
<script>
    $(document).ready(function() {
        var A=$("div1").myPlugin({
            someOption:"someValue"
        });
        $("#button1").click(function(){
            A.reload();
        });
    });
</script>

单击以重新加载
$(文档).ready(函数(){
var A=$(“div1”).myPlugin({
someOption:“someValue”
});
$(“#按钮1”)。单击(函数(){
A.重新加载();
});
});

返回值总是未定义_load()。。。如果您有任何想法,我们将不胜感激。

您在定义函数之前返回,而且如果重载函数不在更高的范围内,则无法从重载函数访问加载:

(function ( $ ) {
//function definitions:
    function _init() {
        //some action..
    }
    function _load() {
        //some action..
    }


 $.fn.myPlugin = function (options) {
     var settings = $.extend({
        someOption: ""
    }, options);

    return this.each(function () {
        _init();
        _load();
    });

};
$.fn.myPlugin.reload = function () {
    _load(); //
}
}( jQuery ));
请注意,它可以通过以下方式访问:

 $.myPlugin.reload();
重载不是myPlugin实例的一部分

如果要为每个实例返回自定义对象,请执行以下操作:

 (function ( $ ) {
 $.fn.myPlugin = function (options) {
     var settings = $.extend({
        someOption: ""
    }, options);

     //function definitions:
    function _init() {
        //some action..
    }
    function _load() {
        //some action..
    }
    //iterate
    this.each(function () {
        _init();
        _load();
    });

   return {
     reload:_load,
   };
};
}( jQuery ));
现在你可以做了

$("test").myPlugin().reload();

在定义函数之前返回,如果重载函数不在更高的范围内,则无法从重载函数访问加载:

(function ( $ ) {
//function definitions:
    function _init() {
        //some action..
    }
    function _load() {
        //some action..
    }


 $.fn.myPlugin = function (options) {
     var settings = $.extend({
        someOption: ""
    }, options);

    return this.each(function () {
        _init();
        _load();
    });

};
$.fn.myPlugin.reload = function () {
    _load(); //
}
}( jQuery ));
请注意,它可以通过以下方式访问:

 $.myPlugin.reload();
重载不是myPlugin实例的一部分

如果要为每个实例返回自定义对象,请执行以下操作:

 (function ( $ ) {
 $.fn.myPlugin = function (options) {
     var settings = $.extend({
        someOption: ""
    }, options);

     //function definitions:
    function _init() {
        //some action..
    }
    function _load() {
        //some action..
    }
    //iterate
    this.each(function () {
        _init();
        _load();
    });

   return {
     reload:_load,
   };
};
}( jQuery ));
现在你可以做了

$("test").myPlugin().reload();

A
包含对jQuery对象的引用,因此具有
$.fn的所有方法。
但是您的
重载
不是$.fn的方法,而是$.fn.myPlugin的方法。
如果你解决了这个问题,并考虑到乔纳斯的回答,那么它应该会起作用;)

A
持有对jQuery对象的引用,因此拥有
$.fn的所有方法。
但是您的
重载
不是$.fn的方法,而是$.fn.myPlugin的方法。

如果你解决了这个问题,并考虑到乔纳斯的回答,那么它应该会起作用;)

尽力。。不工作。如果我这样称呼它:
A.reload()错误是:A.reload()不是函数,如果我像这样调用它:
A.myPlugin.reload()错误是:找不到变量“load@СјјћПаааћ”,它应该与最后一个代码一起使用(我在中间编辑)。如果问题不在其他地方…那么,这些函数现在完全在插件之外,它们需要在插件中,因为它们使用的是本地插件变量和元素。@böbјbјbјbПbаbћbаbћbаbаbаbаb1072?他们需要引用这个吗?函数相对于return语句的位置不是问题。尝试不工作。如果我这样称呼它:
A.reload()错误是:A.reload()不是函数,如果我像这样调用它:
A.myPlugin.reload()错误是:找不到变量“load@СјјћПаааћ”,它应该与最后一个代码一起使用(我在中间编辑)。如果问题不在其他地方…那么,这些函数现在完全在插件之外,它们需要在插件中,因为它们使用的是本地插件变量和元素。@böbјbјbјbПbаbћbаbћbаbаbаbаb1072?他们需要引用这个吗?函数相对于return语句的位置不是问题。是的,但我相信用户的意思是,
A.reload()
不起作用,因为它不是jquery对象的属性/函数,而jquery对象就是
A
。因此需要类似于
$.fn.reload=
。。首先或者
返回这个。每个
都应该是
返回这个
我怀疑还有更多(问题)尽管:)至于我上面的评论,
返回这个仍然返回jquery对象:是的,但我相信用户说的是
a.reload()
不起作用,因为它不是jquery对象的属性/函数,而
a
就是这样。因此需要类似于
$.fn.reload=
。。首先或者
返回这个。每个
都应该是
返回这个
我怀疑还有更多(问题)尽管:)至于我上面的评论,
返回这个仍然返回jquery对象:这些函数仅在调用
$.fn.myPlugin
时创建的上下文中可用。
$.fn.myPlugin.reload
无法访问它。您必须将所述函数移到可以访问的其他位置,或者重新考虑如何定义/使用
$.fn.myPlugin.reload
。我的建议是不要使用
$.fn.myPlugin.reload
,而是让您的函数接受可选的字符串参数。如果第一个参数是
'reload'
,请对当前集合运行
\u load
方法,否则执行正常操作。@KevinB这听起来更像jquery的工作方式我同意删除
$.fn.myPlugin.reload
。。。但当插件初始化时,它正在为指定的div元素创建一堆html元素。当我用一个不同的参数再次初始化时,这个参数不是同一个对象,并且不起作用。。。但问题是,如果传入字符串param而不是对象,init将不会运行。只装载。当然,您还需要将传入的选项存储在某个位置,以便第二次运行时仍会保留这些选项。这些函数仅在调用
$.fn.myPlugin
时创建的上下文中可用。
$.fn.myPlugin.reload
无法访问它。您必须将所述函数移到可以访问的其他位置,或者重新考虑如何定义/使用
$.fn.myPlugin.reload
。我的建议是不要使用
$.fn.myPlugin.reload
,而是让您的函数接受可选的字符串参数。如果第一个参数是
'reload'
,请对当前集合运行
\u load
方法,否则执行正常操作。@KevinB这听起来更像jquery的工作方式我同意删除
$.fn.myPlugin.reload
。。。但当插件初始化时,它正在为指定的div元素创建一堆html元素。当我用另一个段落再次初始化时