Я работаю над проектом начисления заработной платы, в котором я хочу рассчитать сверхурочную работу, надбавку и налог на зарплату. Я хочу добавить сверхурочную работу и надбавку к зарплате и вычесть налог из зарплаты.

Следующий скрипт работает с учетом сверхурочной работы и надбавки, но у меня возникают проблемы с исчислением налога.

Когда я ввожу процент налога, он должен рассчитать сумму налога от зарплаты до поля налога и вычислить итоговую сумму. Когда я ввожу налог напрямую, он должен рассчитать процент в поле taxPercentage и вычислить сумму.

$(document).on('change keyup blur', '.add', function(e) {
  add();
});

function add() {
  salary = $('#salary').val();
  allowance = $('#allowance').val() || 0;
  over = $('#over').val() || 0;
  prevTotal = $('#total').val() || 9000;

  if (allowance > 0 || over > 0) {
    total = parseFloat(salary) + parseFloat(allowance) + parseFloat(over);
    $('#total').val(total);
  } else {
    $('#total').val(prevTotal);
  }
}

$(document).on('change keyup blur', '.tax', function(e) {
  subtracttax();
});

function subtracttax() {
  salary = $('#salary').val();
  taxPercentage = $('#taxPercentage').val() || 0;
  tax = $('#tax').val() || 0;
  prevTotal = $('#total').val() || 9000;

  if (taxPercentage > 0) {
    total = parseFloat(salary) * parseFloat(taxPercentage) / 100;
    $('#tax').val(total);
    $('#total').val(prevTotal - total);
  } else {
    $('#total').val(prevTotal);
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
<div>
  <label> salary </label>
  <input type="text" id="salary" value="9000" />
</div>
<br>
<div>
  <label> over Time </label>
  <input type="text" class="add" id="over" />
</div>
<br>
<div>
  <label> allowance </label>
  <input type="text" class="add" id="allowance" />
</div>
<br>
<div>
  <label> Tax Percentage</label>
  <input type="text" class="tax" id="taxPercentage" />
</div>
<br>
<div>
  <label> Total Tax</label>
  <input type="text" class="tax" id="tax" />
</div>
<br>
<div>
  <label> Total salary</label>
  <input type="text" id="total" />
</div>
1
Dishko 28 Май 2019 в 13:22

2 ответа

Лучший ответ

Попробуй вот так.

Согласно вашему комментарию я только со временем добавил зарплату +.

calculateTax();
$(document).on('change keyup blur', '.tax', function(e) {
  calculateTax();
});

$(document).on('change keyup blur', '.taxVal', function(e) {
  calculateTaxPer();
});

function calculateTax() {
  salary = $('#salary').val();
  allowance = $('#allowance').val() || 0;
  over = $('#over').val() || 0;
  total = (parseFloat(salary) + parseFloat(allowance) + parseFloat(over)) || 0;
  taxPercentage = $('#taxPercentage').val() || 0;
  tax = $('#tax').val() || 0;
  $('#total').val(total);
  
  if (taxPercentage > 0) {
    totalTax = (parseFloat(salary) + parseFloat(over)) * parseFloat(taxPercentage) / 100;
    $('#tax').val(totalTax);
    $('#total').val(total - totalTax);
    return false;
  }
  
}

function calculateTaxPer(){
  salary = $('#salary').val();
  allowance = $('#allowance').val() || 0;
  over = $('#over').val() || 0;
  total = (parseFloat(salary) + parseFloat(allowance) + parseFloat(over)) || 0;
  taxPercentage = $('#taxPercentage').val() || 0;
  tax = $('#tax').val() || 0;
  $('#total').val(total);
  
  if(tax > 0){
    taxPer = (parseFloat(tax)/(parseFloat(salary) + parseFloat(over)))*100;
    $('#taxPercentage').val(taxPer);
    $('#total').val(total - tax);
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
<div>
  <label> salary </label>
  <input type="text" id="salary" value="9000" />
</div>
<br>
<div>
  <label> over Time </label>
  <input type="text" class="tax" id="over" />
</div>
<br>
<div>
  <label> allowance </label>
  <input type="text" class="tax" id="allowance" />
</div>
<br>
<div>
  <label> Tax Percentage</label>
  <input type="text" class="tax" id="taxPercentage" />
</div>
<br>
<div>
  <label> Total Tax</label>
  <input type="text" class="taxVal" id="tax" />
</div>
<br>
<div>
  <label> Total salary</label>
  <input type="text" id="total" />
</div>
1
Syed mohamed aladeen 28 Май 2019 в 11:16

Изменить эту строку в функции вычитания

prevTotal = $('#total').val() || 9000;

Кому

prevTotal = parseFloat(salary) + parseFloat(allowance) + parseFloat(over);

Проблема в том, что вы переопределяете итоговую стоимость после ввода налоговой стоимости. Вместо этого вы должны рассчитывать итоги каждый раз, когда вы вносите изменения.

0
shreyas d 28 Май 2019 в 10:34