Javascript 初始化插件后如何调用jquery插件内部的函数
我正在创建我自己的jQuery插件,它可以分配给文档中的多个元素。我想,在一些事件中,为那个特定的元素调用插件内部的函数,但一切都让我抓狂。插件本身可以工作,但外部调用存在问题 简单插件:Javascript 初始化插件后如何调用jquery插件内部的函数,javascript,jquery,jquery-plugins,Javascript,Jquery,Jquery Plugins,我正在创建我自己的jQuery插件,它可以分配给文档中的多个元素。我想,在一些事件中,为那个特定的元素调用插件内部的函数,但一切都让我抓狂。插件本身可以工作,但外部调用存在问题 简单插件: (function ( $ ) { $.fn.myPlugin = function (options) { var settings = $.extend({ someOption: "" }, options); return
(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=
。。首先或者返回这个。每个都应该是返回这个
我怀疑还有更多(问题)尽管:)至于我上面的评论,返回这个插件中的code>仍然返回jquery对象:是的,但我相信用户说的是a.reload()
不起作用,因为它不是jquery对象的属性/函数,而a
就是这样。因此需要类似于$.fn.reload=
。。首先或者返回这个。每个都应该是返回这个
我怀疑还有更多(问题)尽管:)至于我上面的评论,返回这个插件中的code>仍然返回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元素。当我用另一个段落再次初始化时