Add Table Row, Better Coding Advice

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Constantine AI
    New Member
    • Mar 2008
    • 129

    Add Table Row, Better Coding Advice

    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;

    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;
    		}
    	}
    }
    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?
  • Constantine AI
    New Member
    • Mar 2008
    • 129

    #2
    Also i have tried using the clone row but i couldn't get it to work like this does!

    Comment

    • acoder
      Recognized Expert MVP
      • Nov 2006
      • 16032

      #3
      Firstly, remove the eval. For example, for code1:
      Code:
      var window["cell" + j] = row.insertCell(i);
      You can remove a lot of the toString() calls too.

      Can you post your code attempt for cloneNode:
      The cloneNode() method of the Node interface returns a duplicate of the node on which this method was called. Its parameter controls if the subtree contained in the node is also cloned or not.

      Comment

      Working...