我有麻煩提供我的插件與公共職能,排序什麼jQueryUI我認爲。我的插件代碼如下。簡單的公共函數在簡單的jQuery插件
當$("#someField").myPlugin({'editable':true});
把它叫做遍歷指定的元素,在這種情況下,只有一個#someField
並設置amount
爲0
然後從某處代碼,我想打電話給公共職能set10
會影響元素#someField
我傳遞給插件以前。
因此,當通過switch語句調用$("#someField").myPlugin("set10");
時,它將設置爲10.現在,但是當我點擊該字段並執行click
內部的代碼時,它將再次顯示爲0。
我不明白爲什麼這不起作用。我認爲在相同的DOM元素上調用.myPlugin
會保持數量的值,但顯然我在這裏丟失了重要的東西。將不勝感激任何幫助和解釋。
(function($)
{
$.fn.myPlugin=function(options) {
// default settings
var settings = $.extend({
'editable': true
}, options);
return this.each(function()
{
var amount=0;
switch(options)
{
case "set10":
set10();
}
var t=$(this);
function set10()
{
amount=10;
}
t.on("click", function(e)
{
console.log(amount);
});
});
};
})(jQuery)
$("#someField").myPlugin({'editable':true});
$("#someField").myPlugin("set10");
編輯:
具有不同的圖案細看之後,我放在一起的東西,似乎工作。它幾乎跟你描述的一樣,但是請讓我知道我的方法是否有什麼可怕的錯誤。基本上它通過jQuerys data
方法將我需要的數據附加到HTML元素本身。然後,當函數被調用時,它會檢查選項是否實際上是一個字符串,並在每個循環中當前具有的特定DOM元素的上下文中調用適當的方法。這是公共方法如何實現的簡化版本?就像我說的那樣,它在我的插件中起作用,但是我想正確地做,並且擔心我的問題還存在一些問題。
(function($)
{
$.fn.myPlugin=function(options) {
// default settings
var settings = $.extend({
'editable': true
}, options);
return this.each(function()
{
if(typeof options == 'string')
{
switch(options)
{
case "set10":
{
set10.call(this);
return;
}
}
}
var amount=0;
var t=$(this);
function set10()
{
var t=$(this);
amount=10;
$.data(t[0],"amount",amount);
}
t.on("click", function(e)
{
if($.data(t[0],"amount"))
amount = $.data(t[0],"amount",amount);
console.log(amount);
});
});
};
})(jQuery)