У меня есть таблица, содержащая следующую структуру данных:
Я получаю все эти данные с помощью этого кода ниже:
<?php
include "../db.php";
$select_payroll_category = "SELECT * from payroll_category";
$employee_payroll_result = mysqli_query($con,$select_payroll_category);
?>
<table>
<thead style = "color: #222426;">
<tr>
<th>
<div class = "form-check">
<input type = "checkbox" class = "form-check-input checkAll">
<label class = "form-check-label">ID</label>
</div>
</th>
<th>Category name</th>
<th>Category code</th>
<th>Category Type</th>
<th>Category Amount</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<?php
while ($row = mysqli_fetch_array($employee_payroll_result)) {
echo "<tr style='color:#222426;'>
<td>
<div class='form-check'>
<input type='checkbox' name='payroll_group' value = ".$row["amount"]."class='form-check-input'>
<label class='form-check-label' style='color:#fff;'>".$row["payroll_cat_id"]."</label>
</div>
</td>
<td>".$row["payroll_cat_name"]."</td>
<td>".$row["payroll_cat_code"]."</td>
<td>".$row["category_type"]."</td>
<td>".$row["amount"]."</td>
</tr>";
}
?>
</tbody>
</table>
<button id = "button">save</button>
<p id = "result"></p>
Теперь при нажатии button
я хочу рассчитать сумму на основе category_type,
Если категория earning
, то она добавит сумму,
А если категория dedution
то вычитает сумму,
Используя jquery, я хочу выполнить это
Ниже приведен мой код jquery, который я пробовал,
<script type = "text/javascript">
$(document).ready(function(){
$("#button").click(function(){
var favorite = [];
$.each($("input[name='payroll_group']:checked"), function(){
favorite.push($(this).val());
});
var total =
console.info("My favourite sports are: " + favorite);
$('#result').html(favorite);
});
});
</script>
Используя этот код, я получаю 1000,35000,6500
значение суммы, которое я отметил флажком
Да, я получил числа (сумму), и теперь мне нужно рассчитать сумму, которую я отметил в чекбоксе в соответствии с ее типом (заработок / вычет), если это earning
, она добавит сумму, а если это deduction
, она вычтет количество
Попробуй это
<body>
<table>
<tbody>
<tr>
<td><div><input type = "checkbox"></div></td>
<td>...</td>
<td>...</td>
<td>deducing</td>
<td>1000</td>
</tr>
<tr>
<td><div><input type = "checkbox"></div></td>
<td>...</td>
<td>...</td>
<td>earning</td>
<td>6000</td>
</tr>
<tr>
<td><div><input type = "checkbox"></div></td>
<td>...</td>
<td>...</td>
<td>earning</td>
<td>3000</td>
</tr>
<tr>
<td><div><input type = "checkbox"></div></td>
<td>...</td>
<td>...</td>
<td>earning</td>
<td>1200</td>
</tr>
<tr>
<td><div><input type = "checkbox"></div></td>
<td>...</td>
<td>...</td>
<td>deducing</td>
<td>1000</td>
</tr>
</tbody>
</table>
<button type = "button" id = "button">Yo</button>
<script src = "https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script>
$(function() {
$("#button").click(function() {
let total = 0;
$("tbody:first tr").each(function() {
if ($(this).children("td").first().children("div").children("input").is(":checked")) {
if ("deducing" == $(this).children("td").eq(3).text()) total = total - parseInt($(this).children("td").eq(4).text());
else if ("earning" == $(this).children("td").eq(3).text()) total = total + parseInt($(this).children("td").eq(4).text());
}
});
alert(total);
});
});
</script>
</body>
Спасибо за ваш ответ, я пробовал этот код, но все равно сталкиваюсь с этой ошибкой Uncaught TypeError: $(...).find(...)[3].text is not a function at HTMLTableRowElement.<anonymous> (new.php:123) at Function.each (jquery-3.3.1.min.js:2) at w.fn.init.each (jquery-3.3.1.min.js:2) at HTMLButtonElement.<anonymous> (new.php:122) at HTMLButtonElement.dispatch (jquery-3.3.1.min.js:2) at HTMLButtonElement.y.handle (jquery-3.3.1.min.js:2)
Я заменил [3]
на eq(3)
, после чего появляется ошибка ```Uncaught SyntaxError: Unexpectedidentifier```
Я заменил [3]
на eq(3)
, после чего появляется ошибка ```Uncaught SyntaxError: Unexpectedidentifier```
Хорошо, но я хочу, чтобы он вычислял только ту сумму, которую я выбрал, например:<tr><td><input type='checkbox' name='payroll_group' value = "1000" class='form-check-input'></td> <td>deducing</td> <td>1000</td> </tr> <tr> <td><input type='checkbox' name='payroll_group' value = "6000" class='form-check-input'></td> <td>earning</td> <td>6000</td> </tr>
Так что, если есть вычет, он будет вычитаться, а если «зарабатывать», он будет добавляться к выбранному мной варианту.
Давайте продолжим обсуждение в чате.
Если мой комментарий верен, и проблема здесь в том, что у вас есть правильные суммы, но вы потеряли «метаинформацию» о том, следует ли прибавлять или вычитать из общей суммы, то я думаю, что самым простым решением было бы сделать следующий:
Сначала измените значение флажка так, чтобы оно отражало действие, которое необходимо предпринять, т.е. если это deduction
, то сделайте значение отрицательным. Таким образом, ваш input
будет:
<input type='checkbox' name='payroll_group' value = " . ($row['category_type'] === 'deduction' ? $row["amount"] * -1 : $row["amount"]) . "class='form-check-input'>
Где ($row['category_type'] === 'deduction' ? $row["amount"] * -1 : $row["amount"])
проверит, является ли category_type
deduction
, затем умножит amount
на -1
, иначе сохранит текущее значение amount
. Обратите внимание, что круглые скобки необходимы.
Затем в вашем текущем js вы должны получить [-1000,35000,6500]
в своем текущем примере. Затем вы можете выполнить простой цикл, чтобы пройтись по массиву и добавить к сумме, или вы можете использовать что-то вроде уменьшить ()
var totalAmount = favorite.reduce(
function (total, amount) {
return parseInt(total) + parseInt(amount)
},
0 // The initial value to start with
)
Проблема в том, что у вас есть правильные номера, и теперь вы не знаете, что с ними делать, так как вы потеряли информацию
earning
/deduction
?