Accessing table cells from a specific row to retrieve their embedded input value
up vote
1
down vote
favorite
I would like the function to return the result of this action on the values from the table below:
a+b*c-(e/f)
This action is worked whithout row with e and f. I found similar problem here but there is no solution for this one special last row. I'm shure how i should get value from e and f inputs. The function shul be workinf for each row - no matter how many of them will be.
function calc(id) {
var row = id.parentNode.parentNode;
var a = row.cells[0].getElementsByTagName('input')[0].value;
var b = row.cells[1].getElementsByTagName('input')[0].value;
var c = row.cells[2].getElementsByTagName('input')[0].value;
var e = row.cells[0].getElementsByTagName('input')[1].value; //not working
var f = row.cells[1].getElementsByTagName('input')[1].value; //not working
var res = +a + +b * c - (e / f);
row.cells[3].getElementsByTagName('input')[0].value = res;
}
body {
font-family: "Calibri";
margin: 0;
}
#inTotal {
font-weight: bold;
border-bottom: 2px solid black;
}
.nr {
font-weight: bold;
}
input {
border: none;
background: transparent;
text-align: center;
}
table,
th,
td {
border: 1px solid black;
border-collapse: collapse;
}
th {
background-color: #b9c1ce;
}
.Left {
text-align: left;
margin-left: 5px;
}
<table id="myTable">
<tr>
<th align="center" width="5%">A</th>
<th align="center" width="10%">B</th>
<th align="center" width="5%">C</th>
<th align="center" width="15%">Result</th>
</tr>
<tr>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="quantity" min="1" max="99" onchange="calc(this);"></td>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="rate" min="0" max="100" onchange="calc(this);"></td>
<td align="center" width="15%"><input align="center" type="text" name="total" min="0" max="99999999"></td>
</tr>
<tr>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="quantity" min="1" max="99" onchange="calc(this);"></td>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="rate" min="0" max="100" onchange="calc(this);"></td>
<td align="center" width="15%"><input align="center" type="text" name="total" min="0" max="99999999"></td>
</tr>
<tr>
<th align="center" width="5%">E</th>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<th align="center" width="5%">F</th>
<td align="center" width="15%"><input align="center" type="text" name="total" min="0" max="99999999"></td>
</tr>
</table>
UPDATE
I wrote a function that was supposed to count the values for data from lines with variables e and f. But unfortunately it lacks to be performed for all rows? I'm not shure how set numbers of rows to serve?
function calc(element) {
var row = element.parentNode.parentNode;
var a = row.cells[0].getElementsByTagName('input')[0].value;
var b = row.cells[1].getElementsByTagName('input')[0].value;
var c = row.cells[2].getElementsByTagName('input')[0].value;
// Getting the last row
// var lastRow = document.getElementById("last-values");
// Then, retrieving e and f
//var e = lastRow.cells[1].getElementsByTagName('input')[0].value;
//var f = lastRow.cells[3].getElementsByTagName('input')[0].value;
var res = +a + +b * c;
row.cells[3].getElementsByTagName('input')[0].value = res;
}
function lastEle()
{
var y = document.getElementById('e').value;
var z = document.getElementById('f').value;
var mytable = document.getElementById('myTable');
var myinputs = mytable.getElementsByTagName('input');
var rowy = mytable.rows.length;
for (var i = 1; i < mytable.rows.length; i++) {
var tmp = mytable.rows[i].myinputs[3].value;
var wynik = +y + +z + +tmp;
mytable.rows[i].myinputs[4].value = wynik;
}
}
body {
font-family: "Calibri"; margin:0;}
#inTotal {
font-weight: bold;
border-bottom: 2px solid black;
}
.nr {
font-weight: bold;
}
input {
border: none;
background: transparent;
text-align: center;
}
table, th, td {
border: 1px solid black;
border-collapse: collapse;
}
th{
background-color: #b9c1ce;
}
.Left {
text-align: left;
margin-left: 5px;
}
<table id="myTable">
<tr class="cipa">
<th align="center" width="5%">A</th>
<th align="center" width="10%">B</th>
<th align="center" width="5%">C</th>
<th align="center" width="15%">D</th>
<th align="center" width="15%">F</th>
</tr>
<tr>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="quantity" min="1" max="99" onchange="calc(this);"></td>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="rate" min="0" max="100" onchange="calc(this);"></td>
<td align="center" width="15%"><input align="center" type="text" onchange="calc(this);lastEle();" id="ads" name="total" min="0" max="99999999"></td>
<td align="center" width="15%"><input align="center" type="text" onkeyup="lastEle();" value="3" name="total" min="0" max="99999999"></td>
</tr>
<tr>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="quantity" min="1" max="99" onchange="calc(this);"></td>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="rate" min="0" max="100" onchange="calc(this);"></td>
<td align="center" width="15%"><input align="center" type="text" onchange="calc(this);lastEle();" name="total" min="0" max="99999999"></td>
<td align="center" width="15%"><input align="center" onkeyup="lastEle();" type="text" name="total" min="0" max="99999999"></td>
</tr>
<tr>
<!-- e -->
<th>e</th>
<td><input type="text" onkeyup="lastEle();" id="e" value="" /></td>
<!-- f -->
<th>f</th>
<td><input type="text" id="f" onkeyup="lastEle();" value="" /></td>
</tr>
</table>
javascript html
add a comment |
up vote
1
down vote
favorite
I would like the function to return the result of this action on the values from the table below:
a+b*c-(e/f)
This action is worked whithout row with e and f. I found similar problem here but there is no solution for this one special last row. I'm shure how i should get value from e and f inputs. The function shul be workinf for each row - no matter how many of them will be.
function calc(id) {
var row = id.parentNode.parentNode;
var a = row.cells[0].getElementsByTagName('input')[0].value;
var b = row.cells[1].getElementsByTagName('input')[0].value;
var c = row.cells[2].getElementsByTagName('input')[0].value;
var e = row.cells[0].getElementsByTagName('input')[1].value; //not working
var f = row.cells[1].getElementsByTagName('input')[1].value; //not working
var res = +a + +b * c - (e / f);
row.cells[3].getElementsByTagName('input')[0].value = res;
}
body {
font-family: "Calibri";
margin: 0;
}
#inTotal {
font-weight: bold;
border-bottom: 2px solid black;
}
.nr {
font-weight: bold;
}
input {
border: none;
background: transparent;
text-align: center;
}
table,
th,
td {
border: 1px solid black;
border-collapse: collapse;
}
th {
background-color: #b9c1ce;
}
.Left {
text-align: left;
margin-left: 5px;
}
<table id="myTable">
<tr>
<th align="center" width="5%">A</th>
<th align="center" width="10%">B</th>
<th align="center" width="5%">C</th>
<th align="center" width="15%">Result</th>
</tr>
<tr>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="quantity" min="1" max="99" onchange="calc(this);"></td>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="rate" min="0" max="100" onchange="calc(this);"></td>
<td align="center" width="15%"><input align="center" type="text" name="total" min="0" max="99999999"></td>
</tr>
<tr>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="quantity" min="1" max="99" onchange="calc(this);"></td>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="rate" min="0" max="100" onchange="calc(this);"></td>
<td align="center" width="15%"><input align="center" type="text" name="total" min="0" max="99999999"></td>
</tr>
<tr>
<th align="center" width="5%">E</th>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<th align="center" width="5%">F</th>
<td align="center" width="15%"><input align="center" type="text" name="total" min="0" max="99999999"></td>
</tr>
</table>
UPDATE
I wrote a function that was supposed to count the values for data from lines with variables e and f. But unfortunately it lacks to be performed for all rows? I'm not shure how set numbers of rows to serve?
function calc(element) {
var row = element.parentNode.parentNode;
var a = row.cells[0].getElementsByTagName('input')[0].value;
var b = row.cells[1].getElementsByTagName('input')[0].value;
var c = row.cells[2].getElementsByTagName('input')[0].value;
// Getting the last row
// var lastRow = document.getElementById("last-values");
// Then, retrieving e and f
//var e = lastRow.cells[1].getElementsByTagName('input')[0].value;
//var f = lastRow.cells[3].getElementsByTagName('input')[0].value;
var res = +a + +b * c;
row.cells[3].getElementsByTagName('input')[0].value = res;
}
function lastEle()
{
var y = document.getElementById('e').value;
var z = document.getElementById('f').value;
var mytable = document.getElementById('myTable');
var myinputs = mytable.getElementsByTagName('input');
var rowy = mytable.rows.length;
for (var i = 1; i < mytable.rows.length; i++) {
var tmp = mytable.rows[i].myinputs[3].value;
var wynik = +y + +z + +tmp;
mytable.rows[i].myinputs[4].value = wynik;
}
}
body {
font-family: "Calibri"; margin:0;}
#inTotal {
font-weight: bold;
border-bottom: 2px solid black;
}
.nr {
font-weight: bold;
}
input {
border: none;
background: transparent;
text-align: center;
}
table, th, td {
border: 1px solid black;
border-collapse: collapse;
}
th{
background-color: #b9c1ce;
}
.Left {
text-align: left;
margin-left: 5px;
}
<table id="myTable">
<tr class="cipa">
<th align="center" width="5%">A</th>
<th align="center" width="10%">B</th>
<th align="center" width="5%">C</th>
<th align="center" width="15%">D</th>
<th align="center" width="15%">F</th>
</tr>
<tr>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="quantity" min="1" max="99" onchange="calc(this);"></td>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="rate" min="0" max="100" onchange="calc(this);"></td>
<td align="center" width="15%"><input align="center" type="text" onchange="calc(this);lastEle();" id="ads" name="total" min="0" max="99999999"></td>
<td align="center" width="15%"><input align="center" type="text" onkeyup="lastEle();" value="3" name="total" min="0" max="99999999"></td>
</tr>
<tr>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="quantity" min="1" max="99" onchange="calc(this);"></td>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="rate" min="0" max="100" onchange="calc(this);"></td>
<td align="center" width="15%"><input align="center" type="text" onchange="calc(this);lastEle();" name="total" min="0" max="99999999"></td>
<td align="center" width="15%"><input align="center" onkeyup="lastEle();" type="text" name="total" min="0" max="99999999"></td>
</tr>
<tr>
<!-- e -->
<th>e</th>
<td><input type="text" onkeyup="lastEle();" id="e" value="" /></td>
<!-- f -->
<th>f</th>
<td><input type="text" id="f" onkeyup="lastEle();" value="" /></td>
</tr>
</table>
javascript html
So when in which moment is problem. Sorry if is a stupid question but i'm trying learning js.
– simple_code
Nov 22 at 17:08
add a comment |
up vote
1
down vote
favorite
up vote
1
down vote
favorite
I would like the function to return the result of this action on the values from the table below:
a+b*c-(e/f)
This action is worked whithout row with e and f. I found similar problem here but there is no solution for this one special last row. I'm shure how i should get value from e and f inputs. The function shul be workinf for each row - no matter how many of them will be.
function calc(id) {
var row = id.parentNode.parentNode;
var a = row.cells[0].getElementsByTagName('input')[0].value;
var b = row.cells[1].getElementsByTagName('input')[0].value;
var c = row.cells[2].getElementsByTagName('input')[0].value;
var e = row.cells[0].getElementsByTagName('input')[1].value; //not working
var f = row.cells[1].getElementsByTagName('input')[1].value; //not working
var res = +a + +b * c - (e / f);
row.cells[3].getElementsByTagName('input')[0].value = res;
}
body {
font-family: "Calibri";
margin: 0;
}
#inTotal {
font-weight: bold;
border-bottom: 2px solid black;
}
.nr {
font-weight: bold;
}
input {
border: none;
background: transparent;
text-align: center;
}
table,
th,
td {
border: 1px solid black;
border-collapse: collapse;
}
th {
background-color: #b9c1ce;
}
.Left {
text-align: left;
margin-left: 5px;
}
<table id="myTable">
<tr>
<th align="center" width="5%">A</th>
<th align="center" width="10%">B</th>
<th align="center" width="5%">C</th>
<th align="center" width="15%">Result</th>
</tr>
<tr>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="quantity" min="1" max="99" onchange="calc(this);"></td>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="rate" min="0" max="100" onchange="calc(this);"></td>
<td align="center" width="15%"><input align="center" type="text" name="total" min="0" max="99999999"></td>
</tr>
<tr>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="quantity" min="1" max="99" onchange="calc(this);"></td>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="rate" min="0" max="100" onchange="calc(this);"></td>
<td align="center" width="15%"><input align="center" type="text" name="total" min="0" max="99999999"></td>
</tr>
<tr>
<th align="center" width="5%">E</th>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<th align="center" width="5%">F</th>
<td align="center" width="15%"><input align="center" type="text" name="total" min="0" max="99999999"></td>
</tr>
</table>
UPDATE
I wrote a function that was supposed to count the values for data from lines with variables e and f. But unfortunately it lacks to be performed for all rows? I'm not shure how set numbers of rows to serve?
function calc(element) {
var row = element.parentNode.parentNode;
var a = row.cells[0].getElementsByTagName('input')[0].value;
var b = row.cells[1].getElementsByTagName('input')[0].value;
var c = row.cells[2].getElementsByTagName('input')[0].value;
// Getting the last row
// var lastRow = document.getElementById("last-values");
// Then, retrieving e and f
//var e = lastRow.cells[1].getElementsByTagName('input')[0].value;
//var f = lastRow.cells[3].getElementsByTagName('input')[0].value;
var res = +a + +b * c;
row.cells[3].getElementsByTagName('input')[0].value = res;
}
function lastEle()
{
var y = document.getElementById('e').value;
var z = document.getElementById('f').value;
var mytable = document.getElementById('myTable');
var myinputs = mytable.getElementsByTagName('input');
var rowy = mytable.rows.length;
for (var i = 1; i < mytable.rows.length; i++) {
var tmp = mytable.rows[i].myinputs[3].value;
var wynik = +y + +z + +tmp;
mytable.rows[i].myinputs[4].value = wynik;
}
}
body {
font-family: "Calibri"; margin:0;}
#inTotal {
font-weight: bold;
border-bottom: 2px solid black;
}
.nr {
font-weight: bold;
}
input {
border: none;
background: transparent;
text-align: center;
}
table, th, td {
border: 1px solid black;
border-collapse: collapse;
}
th{
background-color: #b9c1ce;
}
.Left {
text-align: left;
margin-left: 5px;
}
<table id="myTable">
<tr class="cipa">
<th align="center" width="5%">A</th>
<th align="center" width="10%">B</th>
<th align="center" width="5%">C</th>
<th align="center" width="15%">D</th>
<th align="center" width="15%">F</th>
</tr>
<tr>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="quantity" min="1" max="99" onchange="calc(this);"></td>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="rate" min="0" max="100" onchange="calc(this);"></td>
<td align="center" width="15%"><input align="center" type="text" onchange="calc(this);lastEle();" id="ads" name="total" min="0" max="99999999"></td>
<td align="center" width="15%"><input align="center" type="text" onkeyup="lastEle();" value="3" name="total" min="0" max="99999999"></td>
</tr>
<tr>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="quantity" min="1" max="99" onchange="calc(this);"></td>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="rate" min="0" max="100" onchange="calc(this);"></td>
<td align="center" width="15%"><input align="center" type="text" onchange="calc(this);lastEle();" name="total" min="0" max="99999999"></td>
<td align="center" width="15%"><input align="center" onkeyup="lastEle();" type="text" name="total" min="0" max="99999999"></td>
</tr>
<tr>
<!-- e -->
<th>e</th>
<td><input type="text" onkeyup="lastEle();" id="e" value="" /></td>
<!-- f -->
<th>f</th>
<td><input type="text" id="f" onkeyup="lastEle();" value="" /></td>
</tr>
</table>
javascript html
I would like the function to return the result of this action on the values from the table below:
a+b*c-(e/f)
This action is worked whithout row with e and f. I found similar problem here but there is no solution for this one special last row. I'm shure how i should get value from e and f inputs. The function shul be workinf for each row - no matter how many of them will be.
function calc(id) {
var row = id.parentNode.parentNode;
var a = row.cells[0].getElementsByTagName('input')[0].value;
var b = row.cells[1].getElementsByTagName('input')[0].value;
var c = row.cells[2].getElementsByTagName('input')[0].value;
var e = row.cells[0].getElementsByTagName('input')[1].value; //not working
var f = row.cells[1].getElementsByTagName('input')[1].value; //not working
var res = +a + +b * c - (e / f);
row.cells[3].getElementsByTagName('input')[0].value = res;
}
body {
font-family: "Calibri";
margin: 0;
}
#inTotal {
font-weight: bold;
border-bottom: 2px solid black;
}
.nr {
font-weight: bold;
}
input {
border: none;
background: transparent;
text-align: center;
}
table,
th,
td {
border: 1px solid black;
border-collapse: collapse;
}
th {
background-color: #b9c1ce;
}
.Left {
text-align: left;
margin-left: 5px;
}
<table id="myTable">
<tr>
<th align="center" width="5%">A</th>
<th align="center" width="10%">B</th>
<th align="center" width="5%">C</th>
<th align="center" width="15%">Result</th>
</tr>
<tr>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="quantity" min="1" max="99" onchange="calc(this);"></td>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="rate" min="0" max="100" onchange="calc(this);"></td>
<td align="center" width="15%"><input align="center" type="text" name="total" min="0" max="99999999"></td>
</tr>
<tr>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="quantity" min="1" max="99" onchange="calc(this);"></td>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="rate" min="0" max="100" onchange="calc(this);"></td>
<td align="center" width="15%"><input align="center" type="text" name="total" min="0" max="99999999"></td>
</tr>
<tr>
<th align="center" width="5%">E</th>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<th align="center" width="5%">F</th>
<td align="center" width="15%"><input align="center" type="text" name="total" min="0" max="99999999"></td>
</tr>
</table>
UPDATE
I wrote a function that was supposed to count the values for data from lines with variables e and f. But unfortunately it lacks to be performed for all rows? I'm not shure how set numbers of rows to serve?
function calc(element) {
var row = element.parentNode.parentNode;
var a = row.cells[0].getElementsByTagName('input')[0].value;
var b = row.cells[1].getElementsByTagName('input')[0].value;
var c = row.cells[2].getElementsByTagName('input')[0].value;
// Getting the last row
// var lastRow = document.getElementById("last-values");
// Then, retrieving e and f
//var e = lastRow.cells[1].getElementsByTagName('input')[0].value;
//var f = lastRow.cells[3].getElementsByTagName('input')[0].value;
var res = +a + +b * c;
row.cells[3].getElementsByTagName('input')[0].value = res;
}
function lastEle()
{
var y = document.getElementById('e').value;
var z = document.getElementById('f').value;
var mytable = document.getElementById('myTable');
var myinputs = mytable.getElementsByTagName('input');
var rowy = mytable.rows.length;
for (var i = 1; i < mytable.rows.length; i++) {
var tmp = mytable.rows[i].myinputs[3].value;
var wynik = +y + +z + +tmp;
mytable.rows[i].myinputs[4].value = wynik;
}
}
body {
font-family: "Calibri"; margin:0;}
#inTotal {
font-weight: bold;
border-bottom: 2px solid black;
}
.nr {
font-weight: bold;
}
input {
border: none;
background: transparent;
text-align: center;
}
table, th, td {
border: 1px solid black;
border-collapse: collapse;
}
th{
background-color: #b9c1ce;
}
.Left {
text-align: left;
margin-left: 5px;
}
<table id="myTable">
<tr class="cipa">
<th align="center" width="5%">A</th>
<th align="center" width="10%">B</th>
<th align="center" width="5%">C</th>
<th align="center" width="15%">D</th>
<th align="center" width="15%">F</th>
</tr>
<tr>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="quantity" min="1" max="99" onchange="calc(this);"></td>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="rate" min="0" max="100" onchange="calc(this);"></td>
<td align="center" width="15%"><input align="center" type="text" onchange="calc(this);lastEle();" id="ads" name="total" min="0" max="99999999"></td>
<td align="center" width="15%"><input align="center" type="text" onkeyup="lastEle();" value="3" name="total" min="0" max="99999999"></td>
</tr>
<tr>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="quantity" min="1" max="99" onchange="calc(this);"></td>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="rate" min="0" max="100" onchange="calc(this);"></td>
<td align="center" width="15%"><input align="center" type="text" onchange="calc(this);lastEle();" name="total" min="0" max="99999999"></td>
<td align="center" width="15%"><input align="center" onkeyup="lastEle();" type="text" name="total" min="0" max="99999999"></td>
</tr>
<tr>
<!-- e -->
<th>e</th>
<td><input type="text" onkeyup="lastEle();" id="e" value="" /></td>
<!-- f -->
<th>f</th>
<td><input type="text" id="f" onkeyup="lastEle();" value="" /></td>
</tr>
</table>
function calc(id) {
var row = id.parentNode.parentNode;
var a = row.cells[0].getElementsByTagName('input')[0].value;
var b = row.cells[1].getElementsByTagName('input')[0].value;
var c = row.cells[2].getElementsByTagName('input')[0].value;
var e = row.cells[0].getElementsByTagName('input')[1].value; //not working
var f = row.cells[1].getElementsByTagName('input')[1].value; //not working
var res = +a + +b * c - (e / f);
row.cells[3].getElementsByTagName('input')[0].value = res;
}
body {
font-family: "Calibri";
margin: 0;
}
#inTotal {
font-weight: bold;
border-bottom: 2px solid black;
}
.nr {
font-weight: bold;
}
input {
border: none;
background: transparent;
text-align: center;
}
table,
th,
td {
border: 1px solid black;
border-collapse: collapse;
}
th {
background-color: #b9c1ce;
}
.Left {
text-align: left;
margin-left: 5px;
}
<table id="myTable">
<tr>
<th align="center" width="5%">A</th>
<th align="center" width="10%">B</th>
<th align="center" width="5%">C</th>
<th align="center" width="15%">Result</th>
</tr>
<tr>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="quantity" min="1" max="99" onchange="calc(this);"></td>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="rate" min="0" max="100" onchange="calc(this);"></td>
<td align="center" width="15%"><input align="center" type="text" name="total" min="0" max="99999999"></td>
</tr>
<tr>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="quantity" min="1" max="99" onchange="calc(this);"></td>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="rate" min="0" max="100" onchange="calc(this);"></td>
<td align="center" width="15%"><input align="center" type="text" name="total" min="0" max="99999999"></td>
</tr>
<tr>
<th align="center" width="5%">E</th>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<th align="center" width="5%">F</th>
<td align="center" width="15%"><input align="center" type="text" name="total" min="0" max="99999999"></td>
</tr>
</table>
function calc(id) {
var row = id.parentNode.parentNode;
var a = row.cells[0].getElementsByTagName('input')[0].value;
var b = row.cells[1].getElementsByTagName('input')[0].value;
var c = row.cells[2].getElementsByTagName('input')[0].value;
var e = row.cells[0].getElementsByTagName('input')[1].value; //not working
var f = row.cells[1].getElementsByTagName('input')[1].value; //not working
var res = +a + +b * c - (e / f);
row.cells[3].getElementsByTagName('input')[0].value = res;
}
body {
font-family: "Calibri";
margin: 0;
}
#inTotal {
font-weight: bold;
border-bottom: 2px solid black;
}
.nr {
font-weight: bold;
}
input {
border: none;
background: transparent;
text-align: center;
}
table,
th,
td {
border: 1px solid black;
border-collapse: collapse;
}
th {
background-color: #b9c1ce;
}
.Left {
text-align: left;
margin-left: 5px;
}
<table id="myTable">
<tr>
<th align="center" width="5%">A</th>
<th align="center" width="10%">B</th>
<th align="center" width="5%">C</th>
<th align="center" width="15%">Result</th>
</tr>
<tr>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="quantity" min="1" max="99" onchange="calc(this);"></td>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="rate" min="0" max="100" onchange="calc(this);"></td>
<td align="center" width="15%"><input align="center" type="text" name="total" min="0" max="99999999"></td>
</tr>
<tr>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="quantity" min="1" max="99" onchange="calc(this);"></td>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="rate" min="0" max="100" onchange="calc(this);"></td>
<td align="center" width="15%"><input align="center" type="text" name="total" min="0" max="99999999"></td>
</tr>
<tr>
<th align="center" width="5%">E</th>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<th align="center" width="5%">F</th>
<td align="center" width="15%"><input align="center" type="text" name="total" min="0" max="99999999"></td>
</tr>
</table>
function calc(element) {
var row = element.parentNode.parentNode;
var a = row.cells[0].getElementsByTagName('input')[0].value;
var b = row.cells[1].getElementsByTagName('input')[0].value;
var c = row.cells[2].getElementsByTagName('input')[0].value;
// Getting the last row
// var lastRow = document.getElementById("last-values");
// Then, retrieving e and f
//var e = lastRow.cells[1].getElementsByTagName('input')[0].value;
//var f = lastRow.cells[3].getElementsByTagName('input')[0].value;
var res = +a + +b * c;
row.cells[3].getElementsByTagName('input')[0].value = res;
}
function lastEle()
{
var y = document.getElementById('e').value;
var z = document.getElementById('f').value;
var mytable = document.getElementById('myTable');
var myinputs = mytable.getElementsByTagName('input');
var rowy = mytable.rows.length;
for (var i = 1; i < mytable.rows.length; i++) {
var tmp = mytable.rows[i].myinputs[3].value;
var wynik = +y + +z + +tmp;
mytable.rows[i].myinputs[4].value = wynik;
}
}
body {
font-family: "Calibri"; margin:0;}
#inTotal {
font-weight: bold;
border-bottom: 2px solid black;
}
.nr {
font-weight: bold;
}
input {
border: none;
background: transparent;
text-align: center;
}
table, th, td {
border: 1px solid black;
border-collapse: collapse;
}
th{
background-color: #b9c1ce;
}
.Left {
text-align: left;
margin-left: 5px;
}
<table id="myTable">
<tr class="cipa">
<th align="center" width="5%">A</th>
<th align="center" width="10%">B</th>
<th align="center" width="5%">C</th>
<th align="center" width="15%">D</th>
<th align="center" width="15%">F</th>
</tr>
<tr>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="quantity" min="1" max="99" onchange="calc(this);"></td>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="rate" min="0" max="100" onchange="calc(this);"></td>
<td align="center" width="15%"><input align="center" type="text" onchange="calc(this);lastEle();" id="ads" name="total" min="0" max="99999999"></td>
<td align="center" width="15%"><input align="center" type="text" onkeyup="lastEle();" value="3" name="total" min="0" max="99999999"></td>
</tr>
<tr>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="quantity" min="1" max="99" onchange="calc(this);"></td>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="rate" min="0" max="100" onchange="calc(this);"></td>
<td align="center" width="15%"><input align="center" type="text" onchange="calc(this);lastEle();" name="total" min="0" max="99999999"></td>
<td align="center" width="15%"><input align="center" onkeyup="lastEle();" type="text" name="total" min="0" max="99999999"></td>
</tr>
<tr>
<!-- e -->
<th>e</th>
<td><input type="text" onkeyup="lastEle();" id="e" value="" /></td>
<!-- f -->
<th>f</th>
<td><input type="text" id="f" onkeyup="lastEle();" value="" /></td>
</tr>
</table>
function calc(element) {
var row = element.parentNode.parentNode;
var a = row.cells[0].getElementsByTagName('input')[0].value;
var b = row.cells[1].getElementsByTagName('input')[0].value;
var c = row.cells[2].getElementsByTagName('input')[0].value;
// Getting the last row
// var lastRow = document.getElementById("last-values");
// Then, retrieving e and f
//var e = lastRow.cells[1].getElementsByTagName('input')[0].value;
//var f = lastRow.cells[3].getElementsByTagName('input')[0].value;
var res = +a + +b * c;
row.cells[3].getElementsByTagName('input')[0].value = res;
}
function lastEle()
{
var y = document.getElementById('e').value;
var z = document.getElementById('f').value;
var mytable = document.getElementById('myTable');
var myinputs = mytable.getElementsByTagName('input');
var rowy = mytable.rows.length;
for (var i = 1; i < mytable.rows.length; i++) {
var tmp = mytable.rows[i].myinputs[3].value;
var wynik = +y + +z + +tmp;
mytable.rows[i].myinputs[4].value = wynik;
}
}
body {
font-family: "Calibri"; margin:0;}
#inTotal {
font-weight: bold;
border-bottom: 2px solid black;
}
.nr {
font-weight: bold;
}
input {
border: none;
background: transparent;
text-align: center;
}
table, th, td {
border: 1px solid black;
border-collapse: collapse;
}
th{
background-color: #b9c1ce;
}
.Left {
text-align: left;
margin-left: 5px;
}
<table id="myTable">
<tr class="cipa">
<th align="center" width="5%">A</th>
<th align="center" width="10%">B</th>
<th align="center" width="5%">C</th>
<th align="center" width="15%">D</th>
<th align="center" width="15%">F</th>
</tr>
<tr>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="quantity" min="1" max="99" onchange="calc(this);"></td>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="rate" min="0" max="100" onchange="calc(this);"></td>
<td align="center" width="15%"><input align="center" type="text" onchange="calc(this);lastEle();" id="ads" name="total" min="0" max="99999999"></td>
<td align="center" width="15%"><input align="center" type="text" onkeyup="lastEle();" value="3" name="total" min="0" max="99999999"></td>
</tr>
<tr>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="quantity" min="1" max="99" onchange="calc(this);"></td>
<td align="center" width="10%"><input onkeyup="calc(this);" type="text" name="summ" min="0" max="999999" onchange="calc(this);"></td>
<td align="center" width="5%"><input onkeyup="calc(this);" type="text" name="rate" min="0" max="100" onchange="calc(this);"></td>
<td align="center" width="15%"><input align="center" type="text" onchange="calc(this);lastEle();" name="total" min="0" max="99999999"></td>
<td align="center" width="15%"><input align="center" onkeyup="lastEle();" type="text" name="total" min="0" max="99999999"></td>
</tr>
<tr>
<!-- e -->
<th>e</th>
<td><input type="text" onkeyup="lastEle();" id="e" value="" /></td>
<!-- f -->
<th>f</th>
<td><input type="text" id="f" onkeyup="lastEle();" value="" /></td>
</tr>
</table>
javascript html
javascript html
edited Nov 22 at 21:24
asked Nov 22 at 16:39
simple_code
105
105
So when in which moment is problem. Sorry if is a stupid question but i'm trying learning js.
– simple_code
Nov 22 at 17:08
add a comment |
So when in which moment is problem. Sorry if is a stupid question but i'm trying learning js.
– simple_code
Nov 22 at 17:08
So when in which moment is problem. Sorry if is a stupid question but i'm trying learning js.
– simple_code
Nov 22 at 17:08
So when in which moment is problem. Sorry if is a stupid question but i'm trying learning js.
– simple_code
Nov 22 at 17:08
add a comment |
1 Answer
1
active
oldest
votes
up vote
0
down vote
accepted
You did this:
<table>
<tr>
<td><input type="text" /></td>
<td><input type="text" /></td>
<td><input type="text" /></td>
<td><input type="text" /></td>
</tr>
</table>
Assuming row
points to <tr>
, you can access them this way, where x
is the (n+1)th
cell and y
the (n+1)th
input data :
row.cells[x].getElementsByTagName('input')[y];
Here, y
could only equal 0
, because there is only one input element embedded in the td
element.
To access the "e and f" row, simply set an id to their row:
<tr id="last-values">
<!-- e -->
<th>e</th>
<td><input type="text" value="5" /></td>
<!-- f -->
<th>f</th>
<td><input type="text" value="6" /></td>
</tr>
Then, rewrite your calc() function:
function calc(element) {
var row = element.parentNode.parentNode;
var a = row.cells[0].getElementsByTagName('input')[0].value;
var b = row.cells[1].getElementsByTagName('input')[0].value;
var c = row.cells[2].getElementsByTagName('input')[0].value;
// Getting the last row
var lastRow = document.getElementById("last-values");
// Then, retrieving e and f
var e = lastRow.cells[1].getElementsByTagName('input')[0].value;
var f = lastRow.cells[3].getElementsByTagName('input')[0].value;
var res = +a + +b * c - (e / f);
row.cells[3].getElementsByTagName('input')[0].value = res;
}
Keep in mind that you should write another function if e or f are updated: in this case, you'll have to loop the whole rowset to update the values. I let you write this part.
Below a working snippet (without the part of e and f updating).
function calc(element) {
var row = element.parentNode.parentNode;
var lastRow = document.getElementById("last-values");
var a = row.cells[0].getElementsByTagName('input')[0].value;
var b = row.cells[1].getElementsByTagName('input')[0].value;
var c = row.cells[2].getElementsByTagName('input')[0].value;
var e = lastRow.cells[1].getElementsByTagName('input')[0].value;
var f = lastRow.cells[3].getElementsByTagName('input')[0].value;
var res = +a + +b * c - (e / f);
row.cells[3].getElementsByTagName('input')[0].value = res;
}
table {
width: 100%;
border-collapse: collapse;
table-layout: fixed;
}
table th,
table td {
border: 1px solid black;
}
table th {
background: #a0a0a0;
}
table td input {
display: block;
width: 100%;
}
<table>
<tr>
<th>a</th>
<th>b</th>
<th>c</th>
<th>res</th>
</tr>
<tr>
<!-- a -->
<td><input type="text" onKeyUp="calc(this)" /></td>
<!-- b -->
<td><input type="text" onKeyUp="calc(this)" /></td>
<!-- c -->
<td><input type="text" onKeyUp="calc(this)" /></td>
<!-- res -->
<td><input type="text" onKeyUp="calc(this)" /></td>
</tr>
<tr id="last-values">
<!-- e -->
<th>e</th>
<td><input type="text" value="5" /></td>
<!-- f -->
<th>f</th>
<td><input type="text" value="6" /></td>
</tr>
</table>
I think and understand your concept but do not you think it will look ugly? will it be a bad idea to get values from e and f in this way {var e = document.getElementById('e').value;}
– simple_code
Nov 22 at 17:37
I would like to retrive e from input next to field with E on gray back-ground and the same way f. E and F they are additional variables to which the above rows must refer in the table
– simple_code
Nov 22 at 17:54
wonderfull I am very grateful. Now I have to sit down and analyze and draw the appropriate conclusions ;).
– simple_code
Nov 22 at 18:25
You're welcome! I suggest you to start with introduction to DOM and to keep an eye on the DOM reference. MDN Webdocs are very useful for Javascript/DOM programming. (Note: I remove my comments when a SO question is resolved, unless keeping them is relevant.) Happy coding. :)
– Amessihel
Nov 22 at 18:29
I am asking you to take a look at the functions for e and f values that I could change when filling the table? I update question
– simple_code
Nov 22 at 21:25
|
show 2 more comments
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53435194%2faccessing-table-cells-from-a-specific-row-to-retrieve-their-embedded-input-value%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
accepted
You did this:
<table>
<tr>
<td><input type="text" /></td>
<td><input type="text" /></td>
<td><input type="text" /></td>
<td><input type="text" /></td>
</tr>
</table>
Assuming row
points to <tr>
, you can access them this way, where x
is the (n+1)th
cell and y
the (n+1)th
input data :
row.cells[x].getElementsByTagName('input')[y];
Here, y
could only equal 0
, because there is only one input element embedded in the td
element.
To access the "e and f" row, simply set an id to their row:
<tr id="last-values">
<!-- e -->
<th>e</th>
<td><input type="text" value="5" /></td>
<!-- f -->
<th>f</th>
<td><input type="text" value="6" /></td>
</tr>
Then, rewrite your calc() function:
function calc(element) {
var row = element.parentNode.parentNode;
var a = row.cells[0].getElementsByTagName('input')[0].value;
var b = row.cells[1].getElementsByTagName('input')[0].value;
var c = row.cells[2].getElementsByTagName('input')[0].value;
// Getting the last row
var lastRow = document.getElementById("last-values");
// Then, retrieving e and f
var e = lastRow.cells[1].getElementsByTagName('input')[0].value;
var f = lastRow.cells[3].getElementsByTagName('input')[0].value;
var res = +a + +b * c - (e / f);
row.cells[3].getElementsByTagName('input')[0].value = res;
}
Keep in mind that you should write another function if e or f are updated: in this case, you'll have to loop the whole rowset to update the values. I let you write this part.
Below a working snippet (without the part of e and f updating).
function calc(element) {
var row = element.parentNode.parentNode;
var lastRow = document.getElementById("last-values");
var a = row.cells[0].getElementsByTagName('input')[0].value;
var b = row.cells[1].getElementsByTagName('input')[0].value;
var c = row.cells[2].getElementsByTagName('input')[0].value;
var e = lastRow.cells[1].getElementsByTagName('input')[0].value;
var f = lastRow.cells[3].getElementsByTagName('input')[0].value;
var res = +a + +b * c - (e / f);
row.cells[3].getElementsByTagName('input')[0].value = res;
}
table {
width: 100%;
border-collapse: collapse;
table-layout: fixed;
}
table th,
table td {
border: 1px solid black;
}
table th {
background: #a0a0a0;
}
table td input {
display: block;
width: 100%;
}
<table>
<tr>
<th>a</th>
<th>b</th>
<th>c</th>
<th>res</th>
</tr>
<tr>
<!-- a -->
<td><input type="text" onKeyUp="calc(this)" /></td>
<!-- b -->
<td><input type="text" onKeyUp="calc(this)" /></td>
<!-- c -->
<td><input type="text" onKeyUp="calc(this)" /></td>
<!-- res -->
<td><input type="text" onKeyUp="calc(this)" /></td>
</tr>
<tr id="last-values">
<!-- e -->
<th>e</th>
<td><input type="text" value="5" /></td>
<!-- f -->
<th>f</th>
<td><input type="text" value="6" /></td>
</tr>
</table>
I think and understand your concept but do not you think it will look ugly? will it be a bad idea to get values from e and f in this way {var e = document.getElementById('e').value;}
– simple_code
Nov 22 at 17:37
I would like to retrive e from input next to field with E on gray back-ground and the same way f. E and F they are additional variables to which the above rows must refer in the table
– simple_code
Nov 22 at 17:54
wonderfull I am very grateful. Now I have to sit down and analyze and draw the appropriate conclusions ;).
– simple_code
Nov 22 at 18:25
You're welcome! I suggest you to start with introduction to DOM and to keep an eye on the DOM reference. MDN Webdocs are very useful for Javascript/DOM programming. (Note: I remove my comments when a SO question is resolved, unless keeping them is relevant.) Happy coding. :)
– Amessihel
Nov 22 at 18:29
I am asking you to take a look at the functions for e and f values that I could change when filling the table? I update question
– simple_code
Nov 22 at 21:25
|
show 2 more comments
up vote
0
down vote
accepted
You did this:
<table>
<tr>
<td><input type="text" /></td>
<td><input type="text" /></td>
<td><input type="text" /></td>
<td><input type="text" /></td>
</tr>
</table>
Assuming row
points to <tr>
, you can access them this way, where x
is the (n+1)th
cell and y
the (n+1)th
input data :
row.cells[x].getElementsByTagName('input')[y];
Here, y
could only equal 0
, because there is only one input element embedded in the td
element.
To access the "e and f" row, simply set an id to their row:
<tr id="last-values">
<!-- e -->
<th>e</th>
<td><input type="text" value="5" /></td>
<!-- f -->
<th>f</th>
<td><input type="text" value="6" /></td>
</tr>
Then, rewrite your calc() function:
function calc(element) {
var row = element.parentNode.parentNode;
var a = row.cells[0].getElementsByTagName('input')[0].value;
var b = row.cells[1].getElementsByTagName('input')[0].value;
var c = row.cells[2].getElementsByTagName('input')[0].value;
// Getting the last row
var lastRow = document.getElementById("last-values");
// Then, retrieving e and f
var e = lastRow.cells[1].getElementsByTagName('input')[0].value;
var f = lastRow.cells[3].getElementsByTagName('input')[0].value;
var res = +a + +b * c - (e / f);
row.cells[3].getElementsByTagName('input')[0].value = res;
}
Keep in mind that you should write another function if e or f are updated: in this case, you'll have to loop the whole rowset to update the values. I let you write this part.
Below a working snippet (without the part of e and f updating).
function calc(element) {
var row = element.parentNode.parentNode;
var lastRow = document.getElementById("last-values");
var a = row.cells[0].getElementsByTagName('input')[0].value;
var b = row.cells[1].getElementsByTagName('input')[0].value;
var c = row.cells[2].getElementsByTagName('input')[0].value;
var e = lastRow.cells[1].getElementsByTagName('input')[0].value;
var f = lastRow.cells[3].getElementsByTagName('input')[0].value;
var res = +a + +b * c - (e / f);
row.cells[3].getElementsByTagName('input')[0].value = res;
}
table {
width: 100%;
border-collapse: collapse;
table-layout: fixed;
}
table th,
table td {
border: 1px solid black;
}
table th {
background: #a0a0a0;
}
table td input {
display: block;
width: 100%;
}
<table>
<tr>
<th>a</th>
<th>b</th>
<th>c</th>
<th>res</th>
</tr>
<tr>
<!-- a -->
<td><input type="text" onKeyUp="calc(this)" /></td>
<!-- b -->
<td><input type="text" onKeyUp="calc(this)" /></td>
<!-- c -->
<td><input type="text" onKeyUp="calc(this)" /></td>
<!-- res -->
<td><input type="text" onKeyUp="calc(this)" /></td>
</tr>
<tr id="last-values">
<!-- e -->
<th>e</th>
<td><input type="text" value="5" /></td>
<!-- f -->
<th>f</th>
<td><input type="text" value="6" /></td>
</tr>
</table>
I think and understand your concept but do not you think it will look ugly? will it be a bad idea to get values from e and f in this way {var e = document.getElementById('e').value;}
– simple_code
Nov 22 at 17:37
I would like to retrive e from input next to field with E on gray back-ground and the same way f. E and F they are additional variables to which the above rows must refer in the table
– simple_code
Nov 22 at 17:54
wonderfull I am very grateful. Now I have to sit down and analyze and draw the appropriate conclusions ;).
– simple_code
Nov 22 at 18:25
You're welcome! I suggest you to start with introduction to DOM and to keep an eye on the DOM reference. MDN Webdocs are very useful for Javascript/DOM programming. (Note: I remove my comments when a SO question is resolved, unless keeping them is relevant.) Happy coding. :)
– Amessihel
Nov 22 at 18:29
I am asking you to take a look at the functions for e and f values that I could change when filling the table? I update question
– simple_code
Nov 22 at 21:25
|
show 2 more comments
up vote
0
down vote
accepted
up vote
0
down vote
accepted
You did this:
<table>
<tr>
<td><input type="text" /></td>
<td><input type="text" /></td>
<td><input type="text" /></td>
<td><input type="text" /></td>
</tr>
</table>
Assuming row
points to <tr>
, you can access them this way, where x
is the (n+1)th
cell and y
the (n+1)th
input data :
row.cells[x].getElementsByTagName('input')[y];
Here, y
could only equal 0
, because there is only one input element embedded in the td
element.
To access the "e and f" row, simply set an id to their row:
<tr id="last-values">
<!-- e -->
<th>e</th>
<td><input type="text" value="5" /></td>
<!-- f -->
<th>f</th>
<td><input type="text" value="6" /></td>
</tr>
Then, rewrite your calc() function:
function calc(element) {
var row = element.parentNode.parentNode;
var a = row.cells[0].getElementsByTagName('input')[0].value;
var b = row.cells[1].getElementsByTagName('input')[0].value;
var c = row.cells[2].getElementsByTagName('input')[0].value;
// Getting the last row
var lastRow = document.getElementById("last-values");
// Then, retrieving e and f
var e = lastRow.cells[1].getElementsByTagName('input')[0].value;
var f = lastRow.cells[3].getElementsByTagName('input')[0].value;
var res = +a + +b * c - (e / f);
row.cells[3].getElementsByTagName('input')[0].value = res;
}
Keep in mind that you should write another function if e or f are updated: in this case, you'll have to loop the whole rowset to update the values. I let you write this part.
Below a working snippet (without the part of e and f updating).
function calc(element) {
var row = element.parentNode.parentNode;
var lastRow = document.getElementById("last-values");
var a = row.cells[0].getElementsByTagName('input')[0].value;
var b = row.cells[1].getElementsByTagName('input')[0].value;
var c = row.cells[2].getElementsByTagName('input')[0].value;
var e = lastRow.cells[1].getElementsByTagName('input')[0].value;
var f = lastRow.cells[3].getElementsByTagName('input')[0].value;
var res = +a + +b * c - (e / f);
row.cells[3].getElementsByTagName('input')[0].value = res;
}
table {
width: 100%;
border-collapse: collapse;
table-layout: fixed;
}
table th,
table td {
border: 1px solid black;
}
table th {
background: #a0a0a0;
}
table td input {
display: block;
width: 100%;
}
<table>
<tr>
<th>a</th>
<th>b</th>
<th>c</th>
<th>res</th>
</tr>
<tr>
<!-- a -->
<td><input type="text" onKeyUp="calc(this)" /></td>
<!-- b -->
<td><input type="text" onKeyUp="calc(this)" /></td>
<!-- c -->
<td><input type="text" onKeyUp="calc(this)" /></td>
<!-- res -->
<td><input type="text" onKeyUp="calc(this)" /></td>
</tr>
<tr id="last-values">
<!-- e -->
<th>e</th>
<td><input type="text" value="5" /></td>
<!-- f -->
<th>f</th>
<td><input type="text" value="6" /></td>
</tr>
</table>
You did this:
<table>
<tr>
<td><input type="text" /></td>
<td><input type="text" /></td>
<td><input type="text" /></td>
<td><input type="text" /></td>
</tr>
</table>
Assuming row
points to <tr>
, you can access them this way, where x
is the (n+1)th
cell and y
the (n+1)th
input data :
row.cells[x].getElementsByTagName('input')[y];
Here, y
could only equal 0
, because there is only one input element embedded in the td
element.
To access the "e and f" row, simply set an id to their row:
<tr id="last-values">
<!-- e -->
<th>e</th>
<td><input type="text" value="5" /></td>
<!-- f -->
<th>f</th>
<td><input type="text" value="6" /></td>
</tr>
Then, rewrite your calc() function:
function calc(element) {
var row = element.parentNode.parentNode;
var a = row.cells[0].getElementsByTagName('input')[0].value;
var b = row.cells[1].getElementsByTagName('input')[0].value;
var c = row.cells[2].getElementsByTagName('input')[0].value;
// Getting the last row
var lastRow = document.getElementById("last-values");
// Then, retrieving e and f
var e = lastRow.cells[1].getElementsByTagName('input')[0].value;
var f = lastRow.cells[3].getElementsByTagName('input')[0].value;
var res = +a + +b * c - (e / f);
row.cells[3].getElementsByTagName('input')[0].value = res;
}
Keep in mind that you should write another function if e or f are updated: in this case, you'll have to loop the whole rowset to update the values. I let you write this part.
Below a working snippet (without the part of e and f updating).
function calc(element) {
var row = element.parentNode.parentNode;
var lastRow = document.getElementById("last-values");
var a = row.cells[0].getElementsByTagName('input')[0].value;
var b = row.cells[1].getElementsByTagName('input')[0].value;
var c = row.cells[2].getElementsByTagName('input')[0].value;
var e = lastRow.cells[1].getElementsByTagName('input')[0].value;
var f = lastRow.cells[3].getElementsByTagName('input')[0].value;
var res = +a + +b * c - (e / f);
row.cells[3].getElementsByTagName('input')[0].value = res;
}
table {
width: 100%;
border-collapse: collapse;
table-layout: fixed;
}
table th,
table td {
border: 1px solid black;
}
table th {
background: #a0a0a0;
}
table td input {
display: block;
width: 100%;
}
<table>
<tr>
<th>a</th>
<th>b</th>
<th>c</th>
<th>res</th>
</tr>
<tr>
<!-- a -->
<td><input type="text" onKeyUp="calc(this)" /></td>
<!-- b -->
<td><input type="text" onKeyUp="calc(this)" /></td>
<!-- c -->
<td><input type="text" onKeyUp="calc(this)" /></td>
<!-- res -->
<td><input type="text" onKeyUp="calc(this)" /></td>
</tr>
<tr id="last-values">
<!-- e -->
<th>e</th>
<td><input type="text" value="5" /></td>
<!-- f -->
<th>f</th>
<td><input type="text" value="6" /></td>
</tr>
</table>
function calc(element) {
var row = element.parentNode.parentNode;
var lastRow = document.getElementById("last-values");
var a = row.cells[0].getElementsByTagName('input')[0].value;
var b = row.cells[1].getElementsByTagName('input')[0].value;
var c = row.cells[2].getElementsByTagName('input')[0].value;
var e = lastRow.cells[1].getElementsByTagName('input')[0].value;
var f = lastRow.cells[3].getElementsByTagName('input')[0].value;
var res = +a + +b * c - (e / f);
row.cells[3].getElementsByTagName('input')[0].value = res;
}
table {
width: 100%;
border-collapse: collapse;
table-layout: fixed;
}
table th,
table td {
border: 1px solid black;
}
table th {
background: #a0a0a0;
}
table td input {
display: block;
width: 100%;
}
<table>
<tr>
<th>a</th>
<th>b</th>
<th>c</th>
<th>res</th>
</tr>
<tr>
<!-- a -->
<td><input type="text" onKeyUp="calc(this)" /></td>
<!-- b -->
<td><input type="text" onKeyUp="calc(this)" /></td>
<!-- c -->
<td><input type="text" onKeyUp="calc(this)" /></td>
<!-- res -->
<td><input type="text" onKeyUp="calc(this)" /></td>
</tr>
<tr id="last-values">
<!-- e -->
<th>e</th>
<td><input type="text" value="5" /></td>
<!-- f -->
<th>f</th>
<td><input type="text" value="6" /></td>
</tr>
</table>
function calc(element) {
var row = element.parentNode.parentNode;
var lastRow = document.getElementById("last-values");
var a = row.cells[0].getElementsByTagName('input')[0].value;
var b = row.cells[1].getElementsByTagName('input')[0].value;
var c = row.cells[2].getElementsByTagName('input')[0].value;
var e = lastRow.cells[1].getElementsByTagName('input')[0].value;
var f = lastRow.cells[3].getElementsByTagName('input')[0].value;
var res = +a + +b * c - (e / f);
row.cells[3].getElementsByTagName('input')[0].value = res;
}
table {
width: 100%;
border-collapse: collapse;
table-layout: fixed;
}
table th,
table td {
border: 1px solid black;
}
table th {
background: #a0a0a0;
}
table td input {
display: block;
width: 100%;
}
<table>
<tr>
<th>a</th>
<th>b</th>
<th>c</th>
<th>res</th>
</tr>
<tr>
<!-- a -->
<td><input type="text" onKeyUp="calc(this)" /></td>
<!-- b -->
<td><input type="text" onKeyUp="calc(this)" /></td>
<!-- c -->
<td><input type="text" onKeyUp="calc(this)" /></td>
<!-- res -->
<td><input type="text" onKeyUp="calc(this)" /></td>
</tr>
<tr id="last-values">
<!-- e -->
<th>e</th>
<td><input type="text" value="5" /></td>
<!-- f -->
<th>f</th>
<td><input type="text" value="6" /></td>
</tr>
</table>
edited Nov 22 at 18:20
answered Nov 22 at 17:28
Amessihel
1,9241623
1,9241623
I think and understand your concept but do not you think it will look ugly? will it be a bad idea to get values from e and f in this way {var e = document.getElementById('e').value;}
– simple_code
Nov 22 at 17:37
I would like to retrive e from input next to field with E on gray back-ground and the same way f. E and F they are additional variables to which the above rows must refer in the table
– simple_code
Nov 22 at 17:54
wonderfull I am very grateful. Now I have to sit down and analyze and draw the appropriate conclusions ;).
– simple_code
Nov 22 at 18:25
You're welcome! I suggest you to start with introduction to DOM and to keep an eye on the DOM reference. MDN Webdocs are very useful for Javascript/DOM programming. (Note: I remove my comments when a SO question is resolved, unless keeping them is relevant.) Happy coding. :)
– Amessihel
Nov 22 at 18:29
I am asking you to take a look at the functions for e and f values that I could change when filling the table? I update question
– simple_code
Nov 22 at 21:25
|
show 2 more comments
I think and understand your concept but do not you think it will look ugly? will it be a bad idea to get values from e and f in this way {var e = document.getElementById('e').value;}
– simple_code
Nov 22 at 17:37
I would like to retrive e from input next to field with E on gray back-ground and the same way f. E and F they are additional variables to which the above rows must refer in the table
– simple_code
Nov 22 at 17:54
wonderfull I am very grateful. Now I have to sit down and analyze and draw the appropriate conclusions ;).
– simple_code
Nov 22 at 18:25
You're welcome! I suggest you to start with introduction to DOM and to keep an eye on the DOM reference. MDN Webdocs are very useful for Javascript/DOM programming. (Note: I remove my comments when a SO question is resolved, unless keeping them is relevant.) Happy coding. :)
– Amessihel
Nov 22 at 18:29
I am asking you to take a look at the functions for e and f values that I could change when filling the table? I update question
– simple_code
Nov 22 at 21:25
I think and understand your concept but do not you think it will look ugly? will it be a bad idea to get values from e and f in this way {var e = document.getElementById('e').value;}
– simple_code
Nov 22 at 17:37
I think and understand your concept but do not you think it will look ugly? will it be a bad idea to get values from e and f in this way {var e = document.getElementById('e').value;}
– simple_code
Nov 22 at 17:37
I would like to retrive e from input next to field with E on gray back-ground and the same way f. E and F they are additional variables to which the above rows must refer in the table
– simple_code
Nov 22 at 17:54
I would like to retrive e from input next to field with E on gray back-ground and the same way f. E and F they are additional variables to which the above rows must refer in the table
– simple_code
Nov 22 at 17:54
wonderfull I am very grateful. Now I have to sit down and analyze and draw the appropriate conclusions ;).
– simple_code
Nov 22 at 18:25
wonderfull I am very grateful. Now I have to sit down and analyze and draw the appropriate conclusions ;).
– simple_code
Nov 22 at 18:25
You're welcome! I suggest you to start with introduction to DOM and to keep an eye on the DOM reference. MDN Webdocs are very useful for Javascript/DOM programming. (Note: I remove my comments when a SO question is resolved, unless keeping them is relevant.) Happy coding. :)
– Amessihel
Nov 22 at 18:29
You're welcome! I suggest you to start with introduction to DOM and to keep an eye on the DOM reference. MDN Webdocs are very useful for Javascript/DOM programming. (Note: I remove my comments when a SO question is resolved, unless keeping them is relevant.) Happy coding. :)
– Amessihel
Nov 22 at 18:29
I am asking you to take a look at the functions for e and f values that I could change when filling the table? I update question
– simple_code
Nov 22 at 21:25
I am asking you to take a look at the functions for e and f values that I could change when filling the table? I update question
– simple_code
Nov 22 at 21:25
|
show 2 more comments
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53435194%2faccessing-table-cells-from-a-specific-row-to-retrieve-their-embedded-input-value%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
So when in which moment is problem. Sorry if is a stupid question but i'm trying learning js.
– simple_code
Nov 22 at 17:08