k3nguruh
Erfahrenes Mitglied
Hallo,
ich beschäftige mich seit kurzem mit jQuery und habe mir gedacht, dass ich mich an einem Plugin versuche.
Ok, Clone-Plugins gibt es sicher schon eine Menge, aber die die ich bis jetzt gefunden habe, erfüllen nicht alle meinen Zweck bzw. sind riesig aufgebläht, ....
Nun weiss ich aber nicht, ob mein Plugin so richtig (struckturiert) ist. Viele Informationen (in Deutsch) diesbezüglich konnte ich im Netzt nicht gerade finden. Und wenn ich mir Plugins angeschaut habe, waren die alle nicht nach der Good-Plugin Methods gestrickt.
Vll. kann hier mal ein jQuery Profi drüber schauen und mir vll. noch einige Verbesserungen mitteilen. Natürlich bin ich auch an andere Meinungen von "nicht" Profis interessiert, abgesehen von Sinnlos-Postings.
Funktionieren tut das Plugin jedenfalls so, wie es (für mich) soll.
HIER gehts zur Seite
ich beschäftige mich seit kurzem mit jQuery und habe mir gedacht, dass ich mich an einem Plugin versuche.
Ok, Clone-Plugins gibt es sicher schon eine Menge, aber die die ich bis jetzt gefunden habe, erfüllen nicht alle meinen Zweck bzw. sind riesig aufgebläht, ....
Nun weiss ich aber nicht, ob mein Plugin so richtig (struckturiert) ist. Viele Informationen (in Deutsch) diesbezüglich konnte ich im Netzt nicht gerade finden. Und wenn ich mir Plugins angeschaut habe, waren die alle nicht nach der Good-Plugin Methods gestrickt.
Vll. kann hier mal ein jQuery Profi drüber schauen und mir vll. noch einige Verbesserungen mitteilen. Natürlich bin ich auch an andere Meinungen von "nicht" Profis interessiert, abgesehen von Sinnlos-Postings.
Funktionieren tut das Plugin jedenfalls so, wie es (für mich) soll.
HIER gehts zur Seite
PHP:
;(function($) {
var methods = {
//
//
init: function(options) {
options = $.extend(true, {}, $.fn.cloneBox.defaults, options);
return this.each(function() {
var $cloneBox = $(this);
$cloneBox.find('.cloneSpacer:first').css({'display': 'none'});
$cloneBox.find('[cloneBtn="add"]').live('click', function(event) {
event.preventDefault();
methods._addRow($(this), $cloneBox, options);
});
$cloneBox.find('[cloneBtn="del"]').live('click', function(event) {
event.preventDefault();
methods._delRow($(this), $cloneBox, options);
});
$cloneBox.find('[cloneBtn="delAll"]').live('click', function(event) {
event.preventDefault();
methods._delAllRow($(this), $cloneBox, options);
});
});
},
//
//
_addRow: function($this, $cloneBox, options) {
var $lastRow = $cloneBox.find('.cloneRow:last'),
$newRow = $lastRow.clone(),
cntRows = $cloneBox.find('.cloneRow').length;
if (parseInt(options.limit) > 0 && cntRows == parseInt(options.limit))
return;
$('*', $newRow).each(function() {
var $this = $(this),
attrIdFor = $this.attr('id') ? 'id' : 'for';
// Neue id / for setzen
if (/(\d+)$/.test($this.attr(attrIdFor)))
$this.attr(attrIdFor, $this.attr(attrIdFor).replace(/(\d+)$/, (parseInt(RegExp.$1) + 1)));
// Neuen name setzen
if (/\[(\d+)\]/.test($this.attr('name')))
$this.attr('name', $this.attr('name').replace(/\[(\d+)\]/, '[' + (parseInt(RegExp.$1) + 1) + ']'));
});
methods._clearFields($newRow);
$newRow.insertAfter($lastRow).find('.cloneSpacer').css({'display': ''});
},
//
//
_delRow: function($this, $cloneBox, options) {
var $delRow = $this.closest('.cloneRow'),
cntRows = $cloneBox.find('.cloneRow').length;
if (cntRows > 1)
{
$delRow.remove();
$cloneBox.find('.cloneSpacer:first').css({'display': 'none'});
}
else
{
methods._clearFields($delRow);
}
},
//
//
_delAllRow: function($this, $cloneBox, options) {
$cloneBox.find('.cloneRow').each(function() {
methods._delRow($(this), $cloneBox, options);
});
},
//
//
_clearFields: function($cloneRow) {
$(':input', $cloneRow).each(function() {
var $this = $(this);
switch($this.prop('type'))
{
case 'text':
case 'password':
case 'textarea':
case 'select-one':
case 'select-multiple':
$this.val('');
break;
case 'checkbox':
case 'radio':
$this.attr('checked', false);
break;
}
});
}
};
//
//
$.fn.cloneBox = 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 on jQuery.cloneBox');
}
};
//
// extend options
$.fn.cloneBox.defaults = {
limit: ''
};
})(jQuery);
Zuletzt bearbeitet: