jQuery Plugin Problem mit Gültigkeitsbereich von Variablen/Funktionen
07.08.2012 um 19:40Hallo,
ich schreibe an einem jQuery Plugin, das mir eine Liste von formell identischen Eingabefeldern verwaltet und möchte darin bestimmte Variablen und Funktionen über alle Methoden sharen. Dabei gibt es jetzt Fehler. Es fängt damit an, dass inputlist_add() in der add_row mehode nicht gefunden wird. Wenn ich die Funtion aber außerhalb der Methoden (aber innerhalb des Plugins natürlich) definiere, gibt es viele Folgefehler, die auch dann nicht auf hören, wenn ich auch die Variablen aus der Init methode dorthin auslagere.
ich schreibe an einem jQuery Plugin, das mir eine Liste von formell identischen Eingabefeldern verwaltet und möchte darin bestimmte Variablen und Funktionen über alle Methoden sharen. Dabei gibt es jetzt Fehler. Es fängt damit an, dass inputlist_add() in der add_row mehode nicht gefunden wird. Wenn ich die Funtion aber außerhalb der Methoden (aber innerhalb des Plugins natürlich) definiere, gibt es viele Folgefehler, die auch dann nicht auf hören, wenn ich auch die Variablen aus der Init methode dorthin auslagere.
// lists of input elements plugin
// ------------------------------
(function( $ ){
var methods = {
init : function( options ) {
// define options w/ defaults
var defaults = { 'add_text': 'add', 'gen_content': function() {} };
var options = $.extend(defaults, options);
// store this
var list_div = this;
// init list with addbutton
var addbtn = $('<input type="button" value="'+options.add_text+'" >');
addbtn.click(function () {
inputlist_add($(this));
});
this.after(addbtn);
function inputlist_add() {
var content = options.gen_content();
var rembtn = $('<input type="button" value="remove" >');
rembtn.click(function () {
$(this).parent().remove();
});
list_div.append(content);
content.wrap($(''));
content.after(rembtn);
}
},
add_row : function() {
inputlist_add();
}
};
$.fn.inputlist = function( method ) {
// Method calling logic
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 on jQuery.tooltip' );
}
};
})( jQuery );
$(document).ready(function() {
var test = $('#release_features').inputlist({ // an das div #release_features anfügen
'add_text' : 'add feature',
'gen_content' : function() {
return $('<input type="text" value="defaulttext" >');
}
});
$('#release_features').inputlist('add_row');
});