Gar*_*ton 5 javascript methods jquery jquery-plugins
像这里的许多其他类似问题一样,我正在编写我的第一个jQuery插件.它旨在获取一个select元素,并将选项替换为可单击的列表元素,以用作样本.我的主要功能运行良好,但我需要添加调用另一个方法的功能,这将禁用某些选项.我的问题是,当这样做时,我需要绑定一些点击元素并取消绑定其他元素.
目前我的原始绑定包含在我的'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);
});
}
};
Run Code Online (Sandbox Code Playgroud)
这是我的问题:我需要在禁用它之前调用每个选项上的bind函数 - 但是我无法从disable方法中访问fnBindOptions - 并且因为fnBindOptions包含来自'settings'变量的回调,所以我无法移动它在'init'方法之外.
那么,有没有人在这里有任何建议?
谢谢!
解决方法之一是把你的defaults,settings和bindOptions功能的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);
});
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5344 次 |
| 最近记录: |