JSFiddle - React, Tailwind, and code Playground
HTML
<table>
<tr class="selectable">
<td class="center">
<input type="text" class="qtd" name="qtd[]" />
</td>
<td class="text-center">
<input type="text" class="valor" name="valor[]" value="10" />
</td>
<td class="text-center">
<select name="mark[]" class="mark" >
<option value="0.80">0.80</option>
<option value="0.85">0.85</option>
<option value="0.90">0.90</option>
</select>
</td>
<td class="text-center">
<input type="text" class="total" name="total[]" value="resultado" />
</td>
</tr>
<tr class="selectable">
<td class="center">
<input type="text" class="qtd" name="qtd[]" />
</td>
<td class="text-center">
<input type="text" class="valor" name="valor[]" value="10" />
</td>
<td class="text-center">
<select name="mark[]" class="mark" >
<option value="0.80">0.80</option>
<option value="0.85">0.85</option>
<option value="0.90">0.90</option>
</select>
</td>
<td class="text-center">
<input type="text" class="total" name="total[]" value="resultado" />
</td>
</tr>
<tr class="selectable">
<td class="center">
<input type="text" class="qtd" name="qtd[]" />
</td>
<td class="text-center">
<input type="text" class="valor" name="valor[]" value="10" />
</td>
<td class="text-center">
<select name="mark[]" class="mark" >
<option value="0.80">0.80</option>
<option value="0.85">0.85</option>
<option value="0.90">0.90</option>
</select>
</td>
<td class="text-center">
<input type="text" class="total" name="total[]" value="resultado" />
</td>
...
JavaScript
function getClosest(el, tagName) {
while (el = el.parentNode) {
if (el.tagName.toLowerCase() == tagName) return el;
}
}
//como nao estamos usando jquery, devemos realizar o loop para cada item selecionado
var classQtd = document.getElementsByClassName("qtd");
for(var i=0;i<classQtd.length;i++){
classQtd[i].addEventListener("keyup", function(e){
updateValue(e);
});
}
var classValor = document.getElementsByClassName("valor");
for(var i=0;i<classValor.length;i++){
classValor[i].addEventListener("keyup", function(e){
updateValue(e);
});
}
var classMark = document.getElementsByClassName("mark");
for(var i=0;i<classMark.length;i++){
classMark[i].addEventListener("change", function(e){
updateValue(e);
});
}
//funcao para atualizar os valores
function updateValue(e){
var total = 0;
var qtd = 0;
var valor = 0;
var mark = 0;
// ir buscar o outro valor dentro da mesma linha
var tr = getClosest(e.target, 'tr');
valor = tr.querySelector('input[name="valor[]"]').value;
qtd = tr.querySelector('input[name="qtd[]"]').value;
mark = parseFloat(tr.querySelector('select[name="mark[]"]').value);
total = (qtd * valor ) / mark;
tr.querySelector('input[name="total[]"]').value = total;
}