【发布时间】:2017-05-19 15:32:16
【问题描述】:
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>
返回始终是 _load() 未定义...任何想法都会非常感激。
【问题讨论】:
-
这些函数仅在调用
$.fn.myPlugin时创建的上下文中可用。$.fn.myPlugin.reload无法访问它。您必须将上述功能移到可以访问它们的其他地方,或者重新考虑如何定义/使用$.fn.myPlugin.reload。 -
我的建议是不要使用
$.fn.myPlugin.reload,而是让你的函数接受一个可选的字符串参数。如果第一个参数是'reload',则在当前集合上运行_load方法,否则做正常的事情。 -
@KevinB 这听起来更像 jquery 的工作原理
-
我同意删除
$.fn.myPlugin.reload...但是插件在初始化时会为分配的div元素创建一堆html元素。当我使用不同的参数再次初始化时,该参数不是同一个对象,并且不起作用。 -
对...但关键是如果您传入所述字符串参数而不是对象,init 将不会运行。只加载。当然,您还需要将传入的选项存储在某个地方,这样第二次运行仍然会有它们。
标签: javascript jquery jquery-plugins