I have created an add table row function in javascript, now it works but the code seems like a bodge job and when it adds a row, each field is added at a time for the entire new row so it is slow, rather than displaying the entire new row at one.
Here is my code;
Basically i am after any advice on how to create better code for this function but was also wondering how one would write regex for '_([0-9]+)' in javascript as i have a glitch for my employeeID not changing id's or names depending on the table row?
Here is my code;
Code:
function addTimesheetRowFromEdit(currRow)
{
/* First of all, let's check if the next row already exists */
var nextTableRow = currRow + 1;
if(document.getElementById('employeeID_0' + nextTableRow))
{
return false;
}
var tbl = document.getElementById('editEmployeeTimesheet');
var lastRow = tbl.rows.length;
var iteration = lastRow;
var row = tbl.insertRow(lastRow);
var nextRow = tbl.rows.length - 1; // It's -1 because the next row is +1 but there is a header row and we start numbering at 0 so we compensate for this by taking 2 off.
for(var i = 0; i < 13; i++)
{
// Get the innerHTML of the previous row and insert it into the current row.
j = i + 1;
var code1 = "var cell" + j.toString() + "= row.insertCell(" + i.toString() + ");"
var code2 = "var textNode" + j.toString() + " = document.createTextNode(iteration);";
var code3 = "cell" + j.toString() + ".id = 'DDRow_" + nextRow.toString() + "_" + i.toString() + "'";
if (i == 0) {
var checkCode = "<input type='checkbox' id='batchSelect[]' name='batchSelect[]' align='absmiddle' value='0'/><input type='hidden' id='rowID_0" + nextRow + "' name='rowID_0" + nextRow + "' value='0' />";
var code4 = "cell" + j.toString() + ".innerHTML = document.getElementById('DDRow_" + currRow.toString() + "_" + i.toString() + "').innerHTML.replace = checkCode";
} else if (i == 1) { // If this is the employee column then we need the employee select, not just the text
var code4 = "cell" + j.toString() + ".innerHTML = tdEmployeeIDContent.replace(/_0" + currRow.toString() + "/gi, '_0" + nextRow.toString() + "')";
} else {
var code4 = "cell" + j.toString() + ".innerHTML = document.getElementById('DDRow_" + currRow.toString() + "_" + i.toString() + "').innerHTML.replace(/_0" + currRow.toString() + "/gi, '_0" + nextRow.toString() + "')";
}
eval(code1);
eval(code2);
eval(code3);
eval(code4);
if (i == 2) {
document.getElementById('taskID_0' + nextRow.toString()).value = '0';
}
else if (i == 3) {
document.getElementById('startTime_0' + nextRow.toString()).value = '';
}
else if (i == 4) {
document.getElementById('finishTime_0' + nextRow.toString()).value = '';
}
else if (i == 5) {
document.getElementById('xHour_0' + nextRow.toString()).value = '0';
}
else if (i == 6) {
document.getElementById('description_0' + nextRow.toString()).value = '';
}
else if (i == 7) {
document.getElementById('lodgingValue_0' + nextRow.toString()).value = '';
}
else if (i == 8) {
document.getElementById('expenseValue_0' + nextRow.toString()).value = '';
}
else if (i == 9) {
document.getElementById('ttoc_0' + nextRow.toString()).checked = false;
}
else if (i == 10) {
document.getElementById('ttcc_0' + nextRow.toString()).checked = false;
}
else if (i == 11) {
document.getElementById('td_0' + nextRow.toString()).checked = false;
}
}
}
Comment