'Row-wise calculation of two column values and set to third column by javascript/jquery
Current Output:
https://i.stack.imgur.com/4jFTM.png
Expected Output:
https://i.stack.imgur.com/fusiJ.png
As shown in above image, OnChange of select box the value of result will be set as (rating*weightage) for particular column. Like, OnChange of third select box, only third textbox of result column will show the calculated value.
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
}
td, th {
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
}
tr:nth-child(even) {
background-color: #dddddd;
}
.rating, .result{
width:95%;
border-radius:3px;
padding:6px;
}
<table>
<tr>
<th>Rating</th>
<th>Weightage</th>
<th>Result</th>
</tr>
<tr>
<td>
<select class="rating">
<option selected value="">Select</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</td>
<td>5</td>
<td><input type="text" disabled value="10" class="result"></td>
</tr>
<tr>
<td>
<select class="rating">
<option selected value="">Select</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</td>
<td>10</td>
<td><input type="text" disabled value="30" class="result"></td>
</tr>
<tr>
<td>
<select class="rating">
<option selected value="">Select</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</td>
<td>7</td>
<td><input type="text" disabled value="7" class="result"></td>
</tr>
<tr>
<td>
<select class="rating">
<option selected value="">Select</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</td>
<td>5</td>
<td><input type="text" disabled class="result"></td>
</tr>
<tr>
<td>
<select class="rating">
<option selected value="">Select</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</td>
<td>15</td>
<td><input type="text" disabled class="result"></td>
</tr>
<tr>
<td>
<select class="rating">
<option selected value="">Select</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</td>
<td>17</td>
<td><input type="text" disabled class="result"></td>
</tr>
</table>
Solution 1:[1]
You can do it like this:
$('.rating').change(function() {
var v = $(this).val() || 0
var tr = $(this).closest("tr");
var n = +tr.find("td:eq(1)").text();
tr.find(".result").val(v * n)
});
It will get the required informations from the different parts of your code and multiple them into your input.
$('.rating').change(function() {
var v = $(this).val() || 0
var tr = $(this).closest("tr");
var n = +tr.find("td:eq(1)").text();
tr.find(".result").val(v * n)
});
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
}
td,
th {
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
}
tr:nth-child(even) {
background-color: #dddddd;
}
.rating,
.result {
width: 95%;
border-radius: 3px;
padding: 6px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tr>
<th>Rating</th>
<th>Weightage</th>
<th>Result</th>
</tr>
<tr>
<td>
<select class="rating">
<option selected value="">Select</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</td>
<td>5</td>
<td><input type="text" disabled value="10" class="result"></td>
</tr>
<tr>
<td>
<select class="rating">
<option selected value="">Select</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</td>
<td>10</td>
<td><input type="text" disabled value="30" class="result"></td>
</tr>
<tr>
<td>
<select class="rating">
<option selected value="">Select</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</td>
<td>7</td>
<td><input type="text" disabled value="7" class="result"></td>
</tr>
<tr>
<td>
<select class="rating">
<option selected value="">Select</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</td>
<td>5</td>
<td><input type="text" disabled class="result"></td>
</tr>
<tr>
<td>
<select class="rating">
<option selected value="">Select</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</td>
<td>15</td>
<td><input type="text" disabled class="result"></td>
</tr>
<tr>
<td>
<select class="rating">
<option selected value="">Select</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</td>
<td>17</td>
<td><input type="text" disabled class="result"></td>
</tr>
</table>
Solution 2:[2]
If you are trying to update the rows that have null values in Points column, You just need to join the two tables and add a where clause to limit the rows to the ones you want to update. Something like this
UPDATE t2
SET Points = t.Points
FROM table_1 t
JOIN table_2 t2
ON t.code = t2.code
WHERE t2.Points IS NULL
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Carsten Løvbo Andersen |
| Solution 2 | GoonerForLife |
