Hey I'm sort of stuck. It almost works, but there are so many different ways to do what I'm trying to do it's confusing. I look at 10 examples and they're all different.
Big blob of the HTML:Code:/* ------------------- ADD ROW ------------------- */ function addRow(tableID) { var table = document.getElementById(tableID); var rowCount = table.rows.length; var row = table.insertRow(rowCount); // checkbox var cell1 = row.insertCell(0); var element1 = document.createElement("input"); element1.type = "checkbox"; element1.name = "chk" + rowCount; cell1.appendChild(element1); // row number var cell2 = row.insertCell(1); cell2.innerHTML = rowCount; // quantity var cell3 = row.insertCell(2); cell3.className = "span4"; var element2 = document.createElement("input"); element2.type = "text"; element2.name = "qty" + rowCount; element2.className = "span4"; cell3.appendChild(element2); // SKU var cell4 = row.insertCell(3); var skudiv = document.createElement("div"); skudiv.className = "input-prepend input-append"; var element3 = document.createElement("input"); element3.type = "text"; element3.name = "sku" + rowCount; var skuspanelement = document.createElement("span"); skuspanelement.className = "add-on"; skuspanelement.innerHTML = "SKU"; skudiv.appendChild(skuspanelement); skudiv.appendChild(element3); cell4.appendChild(skudiv); // cost var cell5 = row.insertCell(4); var costdiv = document.createElement("div"); costdiv.className = "input-prepend input-append"; var element4 = document.createElement("input"); element4.type = "text"; element4.name = "cost" + rowCount; element4.className = "span5"; var spanelement = document.createElement("span"); spanelement.className = "add-on"; spanelement.innerHTML = "$"; costdiv.appendChild(spanelement); costdiv.appendChild(element4); cell5.appendChild(costdiv); // add items var cell6 = row.insertCell(5); var element5 = document.createElement("button"); element5.name = "additembutton" + rowCount; element5.className = "btn btn-mini"; element5.onclick = function() { addmultirow('dataTable') }; element5.innerHTML = "Add Items"; cell6.appendChild(element5); } /* ------------------- DELETE ROW ------------------- */ function deleteRow(tableID) { try { var table = document.getElementById(tableID); var rowCount = table.rows.length; for(var i=0; i<rowCount; i++) { var row = table.rows[i]; var chkbox = row.cells[0].childNodes[0]; if(null != chkbox && true == chkbox.checked) { table.deleteRow(i); rowCount--; i--; } } }catch(e) { alert(e); } } /* ------------------- ADD ROW SN ------------------- */ function addRowSN(tableID) { var table = document.getElementById(tableID); var rowCount = table.rows.length; var row = table.insertRow(rowCount); // checkbox var cell1 = row.insertCell(0); var element1 = document.createElement("input"); element1.type = "checkbox"; element1.name = "chk" + rowCount; cell1.appendChild(element1); // row number var cell2 = row.insertCell(1); cell2.innerHTML = rowCount; // quantity var cell3 = row.insertCell(2); cell3.className = "span4"; var element2 = document.createElement("input"); element2.type = "text"; element2.name = "qty" + rowCount; element2.className = "span4"; cell3.appendChild(element2); // SN var cell4 = row.insertCell(3); var sndiv = document.createElement("div"); sndiv.className = "input-prepend input-append"; var element3 = document.createElement("input"); element3.type = "text"; element3.name = "sn" + rowCount; element3.className = "span5"; var snspanelement = document.createElement("span"); snspanelement.className = "add-on"; snspanelement.innerHTML = "SN"; sndiv.appendChild(snspanelement); sndiv.appendChild(element3); cell4.appendChild(sndiv); // UniqueID var cell5 = row.insertCell(4); var costdiv = document.createElement("div"); costdiv.className = "input-prepend input-append"; var element4 = document.createElement("input"); element4.type = "text"; element4.name = "uid" + rowCount; element4.className = "span5"; var spanelement = document.createElement("span"); spanelement.className = "add-on"; spanelement.innerHTML = "ID"; costdiv.appendChild(spanelement); costdiv.appendChild(element4); cell5.appendChild(costdiv); // delete items var cell6 = row.insertCell(5); var element5 = document.createElement("button"); element5.name = "deleteitem" + rowCount; element5.className = "btn btn-mini btn-inverse"; element5.innerHTML = "Delete Item" element5.onclick = function() { deleteRowNCB('dataTable') }; cell6.appendChild(element5); } /* ------------------- DELETE ROW SN ------------------- */ function deleteRowSN(tableID) { try { var table = document.getElementById(tableID); var rowCount = table.rows.length; for(var i=0; i<rowCount; i++) { var row = table.rows[i]; var chkbox = row.cells[0].childNodes[0]; if(null != chkbox && true == chkbox.checked) { table.deleteRow(i); rowCount--; i--; } } }catch(e) { alert(e); } } /* ------------------- DELETE ROW W/O CHECKBOX ------------------- */ // this needs a little TLC // function deleteRowNCB(tableID) { var table = document.getElementById(tableID); var rowCount = table.rows.length; table.deleteRow(2); rowCount--; i--; } /* ------------------- ADD MULTI ROW ------------------- */ function addmultirow() { var qtyofrows = document.getElementById("qty"); var theqty = qtyofrows.value; for (var i=0; i < theqty; i++) { addRowSN("dataTable"); } } /* ------------------- ROW COLLAPSER ------------------- */ function hiderow() { if( document.getElementById("hidethis").style.display=='none' ){ document.getElementById("hidethis").style.display = ''; }else{ document.getElementById("hidethis").style.display = 'none'; } }
Right now if you input text into the first qty box and hit 'add items' it will create that many rows to put serial numbers onto. That's great, but I want to make those rows attach together somehow, so they are collapsible. The only way I can think of would be to make the tables nest together. So if we were to apply some jQuery to re-organise the table, they would move as a set. Figuring how how to change the function to create a table containing rows right now instead of just adding the rows, it's confusing.Code:<div class="row-fluid"> <div class="span12"> <div class="span9"> <div class="well"> <legend>Invoice Items</legend><input type="button" value="Delete Item Type" onclick="deleteRow('dataTable')" class="btn btn-inverse pull-right"/><input type="button" value="Add Item Type" onclick="addRow('dataTable')" class="btn btn-info pull-right"/> <br /><br /> <table id="dataTable" width="350px" border="1" class="table table-hover"> <tr><th></th><th></th><th>QTY</th><th>SKU</th><th>Cost (each)</th><th></th></tr> <tr id="hidethis"> <td><input type="checkbox" name="chk"/></td> <td> 1 </td> <td> <input type="text" id="qty" class="span4"/> </td> <td> <div class="ui-widget input-prepend input-append"><span class="add-on">SKU</span><input type="text" id="skubox"/></div> </td> <td> <div class="input-prepend input-append"><span class="add-on">$</span><input type="text" class="span5"/></div> </td> <td> <button class="btn btn-mini" type="button" onclick="addmultirow('dataTable')">Add Items</button> </td> </tr> </table> </div><!--/well--> </div><!--/span--> </div><!--/span--> </div><!--/row--> <div class="row-fluid"> <div class="span12"> <button onClick="hiderow();">Hide Row</button> </div><!--/span--> </div><!--/row-->
Help greatly appreciated.


Reply With Quote
Bookmarks