我正在构建一个名为 magicForm 的简单 jQuery 插件(这有多荒谬?)。现在面对一个我认为我没有正确解决的问题。
我的插件应该应用在一个容器元素上,当用户填写它们时,它将一一显示它的每个输入。这不是我的问题的确切目的。每次初始化容器时,我都会声明一个事件点击回调。让我举个例子。
(function($){
var methods = {
init: function(options){
return this.each(function(){
var form, inputs;
var settings = {
debug: false
};
settings = $.extend(settings, options);
form = $(this);
$('a.submit', form).on('click', function(event){
if (settings.submitCallback) {
settings.submitCallback.call(form, inputs);
}
return false;
});
});
},
reset: function() {
}
}
$.fn.magicForm = function(method) {
if ( methods[method] ) {
return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === 'object' || ! method ) {
return methods.init.apply( this, arguments );
} else {
$.error( 'Method ' + method + ' does not exist.' );
}
};
})($);
我专注于这段代码的特定部分:
$('a.submit', form).on('click', function(event){
if (settings.submitCallback) {
settings.submitCallback.call(form, inputs);
}
return false;
});
因为每次init
调用该方法时,都会注册那个糟糕的回调。
当我在一个嵌套在 twitter 引导“选项卡”中的元素上调用我的插件时,我正在经历这种痛苦,它本身嵌套在一个引导模式中:init
每次触发我的引导模式的“显示”事件时,我都在调用。
所以,这就是我在我的init
方法中修复它的方式:
// Prevent callback cumulation
if (!$(this).data('form_initialized')) {
$('a.submit', form).on('click', function(event){
if (settings.submitCallback) {
settings.submitCallback.call(form, inputs);
}
return false;
});
$(this).data('form_initialized', true);
}
我对此还没有把握。
感谢您的宝贵时间!