Files
2018-10-17 11:14:38 +03:00

51 lines
2.1 KiB
JavaScript

/**
* Created by moskitos80 on 23.08.14.
*/
var DynamicTable = (function (GLOB) {
var RID = 0;
return function (tBody) {
/* Если ф-цию вызвали не как конструктор фиксим этот момент: */
if (!(this instanceof arguments.callee)) {
return new arguments.callee.apply(arguments);
}
//Делегируем прослушку событий элементу tbody
tBody.onclick = function(e) {
var evt = e || GLOB.event,
trg = evt.target || evt.srcElement;
if (trg.className && trg.className.indexOf("add") !== -1) {
_addRow(trg.parentNode.parentNode, tBody);
} else if (trg.className && trg.className.indexOf("del") !== -1) {
tBody.rows.length > 1 && _delRow(trg.parentNode.parentNode, tBody);
}
};
var _rowTpl = tBody.rows[0].cloneNode(true);
// Корректируем имена элементов формы
var _correctNames = function (row) {
var elements = row.getElementsByTagName("*");
for (var i = 0; i < elements.length; i += 1) {
if (elements.item(i).name) {
if (elements.item(i).type &&
elements.item(i).type === "radio" &&
elements.item(i).className &&
elements.item(i).className.indexOf("glob") !== -1)
{
elements.item(i).value = RID;
} else {
elements.item(i).name = RID + "["+ elements.item(i).name +"]";
}
}
}
RID++;
return row;
};
var _addRow = function (before, tBody) {
var newNode = _correctNames(_rowTpl.cloneNode(true));
tBody.insertBefore(newNode, before.nextSibling);
};
var _delRow = function (row, tBody) {
tBody.removeChild(row);
};
_correctNames(tBody.rows[0]);
};
})(this);