【问题标题】:How to make validation on array for accounting debit and credit如何对会计借方和贷方的数组进行验证
【发布时间】:2021-02-26 03:53:23
【问题描述】:

循环时,我想对借方和贷方金额进行验证。当用户在借方列输入时,输入类型将为“10”,当用户在贷方列输入时,输入类型将为“20”,但用户不能在同一行输入借方和贷方金额。最后,如果借方和贷方金额不相符,它将无法将数据传递给ajax。我不确定如何对数组进行验证。有人有更适合我的情况的想法或任何其他建议吗?

此外,如何将序列号添加到动态行并插入数组中以便可以将其保存到数据库中? JSFiddle

Example input:
|Description|Debit|Credit|
| Item A    | 500 |      | // scenario 1
| Supplier  |     |  500 |
| Item B    | 300 |      | //scenario 2
| Item C    | 300 |      | 
| Supplier  |     |  600 |
| Total     | 1100| 1100 |

因为会计他们可能会输入 1 借 1 贷或 2 借 1 贷,但双方的金额是一致的。所以我做了一个场景1和场景2。

以下是我的编码,我不确定如何对此进行验证。请检查我的代码

                <table id="example-input" class="table table-bordered text-nowrap">
                  <thead>
                    <tr>
                      <th class="wd-5p"></th>
                      <th class=" wd-20p">Description</th>
                      <th class="wd-10p tx-right">Debit</th>
                      <th class="wd-10p tx-right">Credit</th>
                    </tr>
                  </thead>
                  <tbody class="acc_table">
                    <tr class="acc-row">
                      <td>
                        <a id="delete" href="javascript:;" title="Remove row">Delete</i></a></td>
                      <td>
                        <input class="form-control tx-right row-accDesc" type="text"></td>
                      <td>
                        <input class="form-control tx-right row-dr" type="text" value="0"></td>
                      <td>
                        <input class="form-control tx-right row-cr" type="text" value="0"></td>
                    </tr>
                  </tbody>
                  <tfoot>
                    <tr id="hiderow">
                      <td colspan="6" class="tx-center tx-15"><b><a id="addrow" href="javascript:;" title="Add a row"><i class="fe fe-plus-circle"></i>Add a Row</a></b></td>
                      <br>
                    </tr>
                    <tr>
                      <td class="valign-middle"></td>
                      <td class="tx-right">Total</td>
                      <td class="tx-right">
                        <input class="form-control tx-right" type="text" placeholder="0.00" id="debit" disabled></td>
                      <td class="tx-right">
                        <input class="form-control tx-right" type="text" placeholder="0.00" id="credit" disabled></td>
                    </tr>
                  </tfoot>
                </table>

<script>
            $(document).ready(function () {
                AddAccount();

                $('#addrow').click(function () {
                    addRow();
                });

            });

            $(document).on('click', '.delete-row', function () {
                $(this).parents('.acc-row').remove();
            });

            $(document).on('keyup', '.row-dr, .row-cr', function (e) {

                var dr = 0;
                cr = 0;
                total_cr = 0,
                total_dr = 0;

                var $row = $(this).closest("tr"); //this is the closest common root of the input elements
                dr += parseFloat($row.find('input.row-dr').val());
                cr += parseFloat($row.find('input.row-cr').val());

                //loop
                $(".acc-row").each(function () {
                    total_dr += $(this).find(".row-dr").val() != "" ? parseFloat($(this).find(".row-dr").val()) : 0
                    total_cr += $(this).find(".row-cr").val() != "" ? parseFloat($(this).find(".row-cr").val()) : 0
                })

                //add result to inputs
                $("#debit").val(total_dr.toFixed(2))
                $("#credit").val(total_cr.toFixed(2))

            });

            function addRow() {
                var addRows =
                    '<tr class="acc-row">' +
                    '<td><a class="delete-row" href="javascript:; ">Delete</i></a></td>' +
                    '<td><input class="form-control tx-right row-accDesc" type="text"></td>' +
                    '<td><input class="form-control tx-right row-dr" type="text"></td>' +
                    '<td><input class="form-control tx-right row-cr" type="text"></td>' +
                    '</tr>'
                $(".acc_table").append(addRows);
            }


            function AddAccount() {
                $("#btnAddAccount").click(function (e) {   

                    var arrayDetail = [];
                    var sArrayDetail = "";

                    $.each($(".acc_table .acc-row"), function (index, value) {
                    //how can I add sequence number? [number of rows] 1,2,3,4...
                    // when looping I want to do a validation here
                    // if user enter debit side, the entry type will be '10',
                    //  if user enter credit side, the entry type will be '20',
                    // user are not able to enter debit and credit side in a row.
                    
            let desc = $(this).find(".row-desc").val()
                        let debit = $(this).find(".row-dr").val()
                        let credit = $(this).find(".row-cr").val()
            let entrytype = 0

                        let detail = {
                            accDescription: desc,
                            accAmount: debit,//how can I define the amount is on debit or credit side?
                            accEntryType: entrytype,//(debit:10, :credit 20), //at there it should give me either 10 or 20 based on where the user key in the amount.
                        }
                        arrayDetail.push(detail)
                    });
                    console.log(arrayDetail)

            sArrayDetail = JSON.stringify(arrayDetail);

                    $.ajax({
                        type: "POST",
                        url: "AddAccount",
                        data: JSON.stringify({sArrayDetail }),
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: function (result) {

                        },
                        failure: function (response) {
                            alert(response.d);
                        }
                    });
            })
            };
</script>

【问题讨论】:

  • 嗨,the entry type will be '10' and when user enter at the credit column, the entry type will be '20'.. 是什么意思?
  • 这意味着在数据库中我有一个 AccEntryType 列,它存储“10”或“20”值,因为在我的数据库中,我将 10 设置为债务人,20 作为债权人。这样我就知道金额记录在谁名下。
  • 所以当用户在借方栏输入金额时,会定义该金额的输入类型为10。

标签: html jquery asp.net arrays


【解决方案1】:

当用户在借方或贷方输入框中键入时,您可以检查任一方的值是否不为空,这取决于向用户显示一些消息。然后,您可以使用相同的条件在您的 json 中添加 accAmountaccEntryType

演示代码

$(document).ready(function() {
  AddAccount();

  $('#addrow').click(function() {
    addRow();
  });

});

$(document).on('click', '.delete-row', function() {
  $(this).parents('.acc-row').remove();
});

$(document).on('keyup', '.row-dr, .row-cr', function(e) {
  var dr = 0;
  cr = 0;
  total_cr = 0,
    total_dr = 0;
  var $row = $(this).closest("tr");
  //if debit side is not empty and use typing in credit side
  if ($row.find('input.row-dr').val() != "" && $(this).hasClass("row-cr")) {
    $(this).val("") //empty that value
    console.log("sorry you have enter value already at debit side")
  } else if ($row.find('input.row-cr').val() != "" && $(this).hasClass("row-dr")) {
    $(this).val("")
    console.log("sorry you have enter value already at credit side")

  }
  $(".acc-row").each(function() {
    total_dr += $(this).find(".row-dr").val() != "" ? parseFloat($(this).find(".row-dr").val()) : 0
    total_cr += $(this).find(".row-cr").val() != "" ? parseFloat($(this).find(".row-cr").val()) : 0
  })
  $("#debit").val(total_dr.toFixed(2))
  $("#credit").val(total_cr.toFixed(2))

});

function addRow() {
  var addRows =
    '<tr class="acc-row">' +
    '<td><a class="delete-row" href="javascript:; ">Delete</i></a></td>' +
    '<td><input class="form-control tx-right row-accDesc" type="text"></td>' +
    '<td><input class="form-control tx-right row-dr" type="text"></td>' +
    '<td><input class="form-control tx-right row-cr" type="text"></td>' +
    '</tr>'
  $(".acc_table").append(addRows);
}


function AddAccount() {
  $("#btnAddAccount").click(function(e) {

    var arrayDetail = [];
    var sArrayDetail = "";

    $.each($(".acc_table .acc-row"), function(index, value) {
      let desc = $(this).find(".row-accDesc").val()
      //check if dr input is not empty if yes get that amt or ele next
      let accAmount = $(this).find(".row-dr").val() != "" ? $(this).find(".row-dr").val() : $(this).find(".row-cr").val()
      //saem here
      let accEntryType = $(this).find(".row-dr").val() != "" ? 10 : 20
      let detail = {
        seq_no: index + 1, //for seq no
        accDescription: desc,
        accAmount: accAmount,
        accEntryType: accEntryType,
      }
      arrayDetail.push(detail)
    });
    console.log(arrayDetail)

    //your ajax call
  })
};
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id="example-input" class="table table-bordered text-nowrap">
  <thead>
    <tr>
      <th class="wd-5p"></th>
      <th class=" wd-20p">Description</th>
      <th class="wd-10p tx-right">Debit</th>
      <th class="wd-10p tx-right">Credit</th>
    </tr>
  </thead>
  <tbody class="acc_table">
    <tr class="acc-row">
      <td>
        <a id="delete" href="javascript:;" title="Remove row">Delete</i></a></td>
      <td>
        <input class="form-control tx-right row-accDesc" type="text"></td>
      <td>
        <input class="form-control tx-right row-dr" type="text" value=""></td>
      <td>
        <input class="form-control tx-right row-cr" type="text" value=""></td>
    </tr>
  </tbody>
  <tfoot>
    <tr id="hiderow">
      <td colspan="6" class="tx-center tx-15"><b><a id="addrow" href="javascript:;" title="Add a row"><i class="fe fe-plus-circle"></i>Add a Row</a></b></td>
      <br>
    </tr>
    <tr>
      <td class="valign-middle"></td>
      <td class="tx-right">Total</td>
      <td class="tx-right">
        <input class="form-control tx-right" type="text" placeholder="0.00" id="debit" disabled></td>
      <td class="tx-right">
        <input class="form-control tx-right" type="text" placeholder="0.00" id="credit" disabled></td>
    </tr>
  </tfoot>
</table>

<button id="btnAddAccount" type="button">Count </button>

【讨论】:

  • 哇,太棒了!我已经为此苦苦挣扎了 2 周。你在几个小时内就解决了我的问题。真的很欣赏你的作品!
  • 想问如何对$("#debit").val() & $("#credit").val()进行验证??如果输入双方的金额不相符,则在进行ajax之前应该说不相符。例如,我的借方是 100,贷方是 300。
  • 借方总额应该大于贷方总额?
  • 借方总额应与贷方总额相同
  • 如果用户的总借记和总贷记不一样,那么应该说“双方的金额不一样,请再检查一遍”。直到双方总数相同,才可以通过ajax
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多