M
Mike the Canadian
Given the code below how can I get the totals to update when the form
loads not just when a cell is changed? I tried a call to
updateColumn(el) in initTable but this gives a "cell has no value"
error.
Thanks in advance.
---------
<form action="" name="ArrayOfInputs">
<table>
<tr>
<td><input type="text" name="D-0-0" value="1"></td>
<td><input type="text" name="D-1-0" value="1"></td>
<td><input type="text" name="D-2-0" value="1"></td>
</tr>
<tr>
<td><input type="text" name="D-0-1" value="2"></td>
<td><input type="text" name="D-1-1" value="2"></td>
<td><input type="text" name="D-2-1" value="2"></td>
</tr>
<tr>
<td><input type="text" name="D-0-2" value="0"></td>
<td><input type="text" name="D-1-2" value="0"></td>
<td><input type="text" name="D-2-2" value="0"></td>
</tr>
<tr>
<td><input type="text" name="D-0-t" value="0" readonly></td>
<td><input type="text" name="D-1-t" value="0" readonly></td>
<td><input type="text" name="D-2-t" value="0" readonly></td>
</tr>
<tr>
<td> </td>
<td><input type="reset"></td>
<td><input type="submit"></td>
</tr>
</table>
</form>
<script type="text/javascript">
function initTable(){
// Attach the event to all cells in the table
// except the ones with 't' in their name
var f = document.forms['ArrayOfInputs'];
var el = f.elements;
for (var i=0, eLen=el.length; i<eLen; i++){
if (el.type.toLowerCase() == 'text'
&& !el.name.match('t') { //don't attach to totals
el.onchange = updateColumn;
//updateColumn(el);
}
}
}
function updateColumn(e){
// Get the cell that fired the event
var e = e || window.event;
var cell = e.target || e.srcElement;
var f = cell.form;
var n = cell.name.split('-');
var j = 0;
var t;
var sum = 0;
while ( (t = f.elements[n[0]+'-'+n[1]+'-'+j]) ){
// Check content, if OK add, else prompt
if ( testNum(t.value )) {
sum -= -t.value; // Using '-' forces t to be a number
} else {
while (!testNum(t.value)) {
t.value = prompt('Entries must be a number.'
+ '\nPlease enter a new value: ');
}
}
j++;
}
f.elements[n[0]+'-'+n[1]+'-'+'t'].value = sum;
}
function testNum(x) {
return /^(\+|-)?\d+(\.)?(\d+)?$/.test(x);
}
window.onload = initTable;
</script>
_______
Trade your DVDs, movies and CDs for Free!
http://www.dvdtrades.net
loads not just when a cell is changed? I tried a call to
updateColumn(el) in initTable but this gives a "cell has no value"
error.
Thanks in advance.
---------
<form action="" name="ArrayOfInputs">
<table>
<tr>
<td><input type="text" name="D-0-0" value="1"></td>
<td><input type="text" name="D-1-0" value="1"></td>
<td><input type="text" name="D-2-0" value="1"></td>
</tr>
<tr>
<td><input type="text" name="D-0-1" value="2"></td>
<td><input type="text" name="D-1-1" value="2"></td>
<td><input type="text" name="D-2-1" value="2"></td>
</tr>
<tr>
<td><input type="text" name="D-0-2" value="0"></td>
<td><input type="text" name="D-1-2" value="0"></td>
<td><input type="text" name="D-2-2" value="0"></td>
</tr>
<tr>
<td><input type="text" name="D-0-t" value="0" readonly></td>
<td><input type="text" name="D-1-t" value="0" readonly></td>
<td><input type="text" name="D-2-t" value="0" readonly></td>
</tr>
<tr>
<td> </td>
<td><input type="reset"></td>
<td><input type="submit"></td>
</tr>
</table>
</form>
<script type="text/javascript">
function initTable(){
// Attach the event to all cells in the table
// except the ones with 't' in their name
var f = document.forms['ArrayOfInputs'];
var el = f.elements;
for (var i=0, eLen=el.length; i<eLen; i++){
if (el.type.toLowerCase() == 'text'
&& !el.name.match('t') { //don't attach to totals
el.onchange = updateColumn;
//updateColumn(el);
}
}
}
function updateColumn(e){
// Get the cell that fired the event
var e = e || window.event;
var cell = e.target || e.srcElement;
var f = cell.form;
var n = cell.name.split('-');
var j = 0;
var t;
var sum = 0;
while ( (t = f.elements[n[0]+'-'+n[1]+'-'+j]) ){
// Check content, if OK add, else prompt
if ( testNum(t.value )) {
sum -= -t.value; // Using '-' forces t to be a number
} else {
while (!testNum(t.value)) {
t.value = prompt('Entries must be a number.'
+ '\nPlease enter a new value: ');
}
}
j++;
}
f.elements[n[0]+'-'+n[1]+'-'+'t'].value = sum;
}
function testNum(x) {
return /^(\+|-)?\d+(\.)?(\d+)?$/.test(x);
}
window.onload = initTable;
</script>
_______
Trade your DVDs, movies and CDs for Free!
http://www.dvdtrades.net