Jquery插件,从其他方法调用函数

像这里的许多其他类似问题一样,我正在编写我的第一个jQuery插件。 它旨在采用select元素并用可点击的列表元素替换选项,以用作样本。 我的主要function运行良好,但我需要添加调用另一个方法的function,这将禁用某些选项。 我的问题是,在执行此操作时,我需要绑定一些点击元素并取消绑定其他元素。

目前我的原始绑定包含在我的’init’方法中的函数中。 我需要能够从另一个’禁用’方法调用该函数。 所以这里是一些代码:

(function($){ var methods = { // Init method init : function(options) { // Set options var defaults = { clickCallback: function(){} // Define empty function for click callback } , settings = $.extend({}, defaults, options) // Function to bind options function fnBindOptions(var1, var2, var3) { // Stuff to bind elements // Hit the click callback settings.clickCallback.call(this); } return this.each(function() { // Check that we're dealing with a select element if(element.is('select')) { // Loop through the select options and create list items for them $('option', element).each(function() { // Stuff to create list elements // Bind click handler to the new list elements fnBindOptions(var1, va2, var3); }); } }); // return return this(); } // Disable buttons method , disable : function(options) { // I need to access fnBindOptions from here $(elementID).children('li').removeClass('disabled').each(function(){ fnBindOptions(var1, var2, var3); }); } }; 

这是我的问题:我需要在禁用它之前调用每个选项上的绑定函数 – 但是我无法从禁用方法中访问fnBindOptions – 并且因为fnBindOptions包含来自’settings’变量的回调,所以我无法移动它在’init’方法之外。

那么,有没有人在这里有任何建议?

谢谢!

解决此问题的一种方法是将您的defaultssettingsbindOptions函数放在methods对象(或更广泛范围内的另一个对象)中,并相应地引用它们:

 var methods = { defaults: { clickCallback: function() {} }, settings: {}, bindOptions: function(var1, var2, var3) { // Stuff to bind elements // Hit the click callback methods.settings.clickCallback.call(this); }, // Init method init: function(options) { methods.settings = $.extend({}, methods.defaults, options); return this.each(function() { if (element.is('select')) { $('option', element).each(function() { // Stuff to create list elements // Bind click handler to the new list elements methods.bindOptions(var1, va2, var3); }); } }); }, // Disable buttons method disable: function(options) { $(elementID).children('li') .removeClass('disabled') .each(function() { methods.bindOptions(var1, var2, var3); }); } };