如何在插件初始化后调用 jquery 插件中的函数
How to call function inside jquery plugin after plugin is initialised
I',正在创建我自己的 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>
return 总是 _load() 未定义...任何想法都将不胜感激。
你在定义函数之前 returning,如果它不在更高的范围内,也无法从重新加载函数访问 _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();
Reload 不是 myPlugin 实例的一部分。
如果您想 return 每个实例的自定义对象,请执行以下操作:
(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
的所有方法。
但是你的 reload
不是 $.fn 的方法而是 $.fn.myPlugin 的方法。
如果您解决此问题并考虑 Jonas 的回答,那么它应该可以工作;)
I',正在创建我自己的 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>
return 总是 _load() 未定义...任何想法都将不胜感激。
你在定义函数之前 returning,如果它不在更高的范围内,也无法从重新加载函数访问 _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();
Reload 不是 myPlugin 实例的一部分。
如果您想 return 每个实例的自定义对象,请执行以下操作:
(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
的所有方法。
但是你的 reload
不是 $.fn 的方法而是 $.fn.myPlugin 的方法。
如果您解决此问题并考虑 Jonas 的回答,那么它应该可以工作;)