我正在構建一個名爲magicForm的簡單jQuery插件(這有多可笑)。現在面對一個我認爲我沒有正確理解的問題。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);
}
而且我感覺到知道這很遠。
謝謝你的時間!
什麼是「累積」?我假設你的意思是「累積」? –
是的,我很抱歉,我修好了 – Codii
不要道歉,我是一個聰明的屁股。我應該向你道歉! –