2015-06-19 75 views
1

我一直在编写jQuery插件工作数小时,阅读文档,搜索帖子等。有一件事尚不清楚。 我正在写有多个实例的一个插件,所以我有这样的事情编写一个jQuery插件:公共方法和多个插件实例

<div id="box1" class="box"></div> 
<div id="box2" class="box"></div> 

<script type="text/javascript"> 
    $(".box").myPlugin(); 
</script> 

所以该插件将作用于两个DOM元素。 这是一个插件演示。假设我需要一个或多个私有变量(演示中的myValue),当然任何实例(box1,box2)都有不同的值。

(function ($) { 

    $.fn.myPlugin = function() { 

     this.each(function() { 

      /* this is a private variable */ 
      var myValue = Math.floor(Math.random() * 10000); 
     }); 

     return this; 
    }; 

    /* this is a public method */ 
    $.fn.myPlugin.showValue = function() { 
     alert('My value is ' + myValue); 
    }; 

}(jQuery)); 

现在我需要这个插件来公开一个读取/写入这种私有变量的公共方法。上面的代码当然会失败,“myValue is undefined”错误。

我需要以某种方式获得对任何实例的引用,然后调用“他们的”公共方法。类似于

$('#box2')。showValue()/ * ??? */

任何帮助将不胜感激。谢谢。

+0

看看:http://learn.jquery.com/plugins/basic-plugin-creation/ –

回答

1

不幸的是,没有简单的方法让您的示例工作,而无需简单定义$.fn namespace上的其他“插件”。

通常,一个插件的方法被实现为参数传递给插件:

$("foo").myPlugin(); // initialize 
$("foo").myPlugin("doSomething"); // do something 

或通过具有可用的一个“实例”对象:

$("foo").myPlugin(); // initialize 
var inst = $("foo").data("myPlugin"); // get instance 
inst.doSomething(); // do something 

第一个选项的一个例子可以在这里找到:http://learn.jquery.com/plugins/basic-plugin-creation/

+0

所以我的例子是 (函数($){ $ .fn.myPlugin =功能(作用){ \t this.each(功能(作用){ \t \t/*这是一个专用变量*/ \t \t变种myValue = Math.floor(Math.random()* 10000); \t \t \t 如果\t(动作=== '节目'){ \t \t \t警报( '我的值是' + myvalue的); \t \t} }); \t \t return this; }; }(jQuery)); 但这是正确的吗?插入代码是不是被称为4次(每个盒子两次),而不是2? – user2029958

+0

这是正确的,您需要为插件编写该事实。 –