Javascript tableDataGlob=tableData; 填充数据(tableDataGlob) }否则{ tableDataGlob=tableData1; 填充数据(tableDataGlob) } }); 函数填充数据(数据){ 函数行附加(tbody){

Javascript tableDataGlob=tableData; 填充数据(tableDataGlob) }否则{ tableDataGlob=tableData1; 填充数据(tableDataGlob) } }); 函数填充数据(数据){ 函数行附加(tbody){ ,javascript,jquery,html,html-table,Javascript,Jquery,Html,Html Table,tableDataGlob=tableData; 填充数据(tableDataGlob) }否则{ tableDataGlob=tableData1; 填充数据(tableDataGlob) } }); 函数填充数据(数据){ 函数行附加(tbody){ 常量标记= ` ` $(tbody).附加(标记); setTimeout(()=>$(“[name=itemNametd]”,tbody.last().focus(),100); //根据动态选择的选项获取数据 //之前,代码声明了全局变量2

tableDataGlob=tableData; 填充数据(tableDataGlob) }否则{ tableDataGlob=tableData1; 填充数据(tableDataGlob) } }); 函数填充数据(数据){ 函数行附加(tbody){ 常量标记= ` ` $(tbody).附加(标记); setTimeout(()=>$(“[name=itemNametd]”,tbody.last().focus(),100); //根据动态选择的选项获取数据 //之前,代码声明了全局变量2019-07-04 15:24:28 var autoCompleteData=Object.keys(tableDataGlob); console.log(自动完成数据); log($(“[name=itemNametd]”,tbody.last()); $(“[name=itemNametd]”,tbody.last().autocomplete({ 来源:自动完成数据 }).data('tableData',data);// ` $(tfoot).append(tfootmarkup); } 行附加($('tbody','#tableInvoice')) rowappendTfoot($('tfoot','#tfootTable')) 函数getValues(行){ 常量搜索=($('[name=itemNametd]',row.val()).toString() console.log(“search:+search”); var数据=tableDataGlob; console.log(tableDataGlob); const value=data[search];//这是导致问题的原因 CostPrice=value.CostPrice; 如果(值){ $(行).find(“[name=itemCodetd]”)val(value.itemCode); $(行).find(“[name=mrptd]”)val(value.mrp); $(行).find(“[name=purRatetd]”)val(CostPrice); $(行).find(“[name=gstPercentagetd]”)val(value.gstPercentage); } } 函数计算(行){ console.log(行) unitQuantity=$(行).find(“[name=unitQtytd]”).val()| |“0”; purchaseRate=$(行).find(“[name=purRatetd]”).val()| |“0”; var mrp=$(行).find(“[name=mrptd]”)。text()| |“0”; totalAmount=(parseFloat(单位数量)*parseFloat(购买率)); $(行).find(“[name=totalAmttd]”).val((totalAmount)); } 函数calcDiscount(行){ unitQuantityOnDisc=$(行).find(“[name=unitQtytd]”).val()| |“0”; purchaseRateOnDisc=$(行).find(“[name=purRatetd]”).val()| |“0”; mrpOnDisc=$(行).find(“[name=mrptd]”).val()| |“0”; 小计DISC=(parseFloat(unitQuantityOnDisc)*parseFloat(purchaseRateOnDisc)); discPercentage=$(行).find(“[name=discPercentagetd]”).val()| |“0”; gstPercentage=$(行).find(“[name=gstPercentagetd]”).val()| |“0”; discAmount=(parseFloat(discPercentage)/100)*parseFloat(totalAmount); TotalAmountIndisc=(parseFloat(totalAmount)-parseFloat(discAmount)) gstAmount=(parseFloat(gstPercentage)/100)*parseFloat(totalamountndisc); TotalAmountOnSt=(parseFloat(totalAmountOnDisc)+parseFloat(gstAmount)) total+=parseFloat(TotalAmountingST); 总折扣额+=总浮动额(discAmount); totalGstAmt+=parseFloat(gstAmount); TotalUnitQuantity+=parseFloat(unitQuantity); 小计+=parseFloat(小计Disc); totalRoundOff=总计-数学四舍五入(总计); $(行).find(“[name=discAmttd]”).val((discamtum)); $(行).find(“[name=gstAmttd]”).val((gstAmount)); $(行).find(“[name=totalAmttd]”).val((totalamountingst)); $(#unitQtytf”).text((totalUnitQty)); $(“#discamtt”).text((totaldiscountatmt)); $(“#gstAmttf”).text((totalGstAmt)); $(“#NetamInput”).val((总计)); $(#totalAmttf”).text((总计)); 美元(“#小计”).val((小计)); 美元(“#itemAmtDiscinput”).val((总折扣)); 美元(“#taxAmtInput”).val((totalGstAmt)); //$(“#roundofffamtinput”).val(格式(totalRoundOff)); } $(文档).on('focusout',函数(e){ 常量行=e.target.parentElement.parentElement if(e.target.matches(“[name=itemNametd]”){ 日志(e.target.parentElement.parentElement); getValues(e.target.parentElement.parentElement) $(“[name=purRatetd]”)focus(); } }); //$('.discPercentagetd').unbind(); $('body')。在('keypress','disccpercentagetd',函数(事件){//这里我试图在单击enter时创建新行 常量行=event.target.parentElement.parentElement if(event.target.matches('[name=discPercentagetd]')){ var keycode=event.keycode | | event.which; 控制台日志(keycode); 如果(键代码=='13'){ 警报(“呈现”) calcDiscount(event.target.parentElement.parentElement) if($(行).parent().find('tr').length-$(行).index()==1){ rowappend(event.target.parentElement.parentElement.parentElement) 总数=0; 总折扣=0; totalGstAmt=0; totalUnitQty=0; 小计=0; $(“#tableInvoice tbody tr”)。每个(函数(){ 计算(本) calcDiscount(本) }) } } } }); $('body').on('keypress','dispercentagetd,.unitQtytd',函数(e){ 常量行=e.target.parentElement.parentElement if(event.target.matches('[name=dispercentagetd]')| | e.target.matches('[name=unitQtytd]')){ var keycode=e.keycode | | event.e; 如果(键代码=='9'){ if(!$(event.target).val()){ e、 预防默认值(); 返回; }
        <div class="form-group col-xs-6 col-sm-6 col-md-6 col-lg-2">
            <label for="supplierInput">Supplier</label>
            <select name="supplierInput" id="supplierInput" class="form-control">
                <option disabled="disabled" selected="true">select supplier
                </option>
                <option>Supplier 1</option>
                <option>Supplier 2</option>

            </select>
        </div>





    </div>
    <div class="row tableInvoice" id="commonDvScroll">
        <table class="table table-bordered" id="tableInvoice">
            <thead>
                <tr>
                    <th id="itemNameth" class="commanth">Item Name</th>
                    <th id="itemCodeth" class="commanth">Code</th>
                    <th id="mrpth" class="commanth">Mrp</th>
                    <th id="purRateth" class="commanth">Pur.Rate</th>
                    <th id="unitQtyth" class="commanth">Unit Qty</th>
                    <th id="discPercentageth" class="commanth">Disc%</th>
                    <th id="discAmtth" class="commanth">Disc Amt</th>
                    <th id="gstPercentageth" class="commanth">Gst%</th>
                    <th id="gstAmtth" class="commanth">Gst Amt</th>
                    <th id="totalAmtth" class="commanth">Total Amount</th>

                </tr>
            </thead>
            <tbody>

            </tbody>

        </table>

    </div>
    <div class="row">
        <table class="table table-bordered" id="tfootTable">
            <tfoot>


            </tfoot>
        </table>
    </div>
    <button type="button" class="commonButton" id="clear">
        <i class="fa fa-eraser"></i> Clear
    </button>
</div>
<script>
    var CostPrice = "";
    var totalAmount = "";
    var unitQuantity = 0;
    var unitQuantityOnDisc = 0;
    var purchaseRateOnDisc = 0;
    var purchaseRate = 0;
    var totalAmount = "";
    var discPercentage = "";
    var discAmount = "";
    var totalAmountOnDisc = "";
    var subTotalOnDisc = 0;
    var gstPercentage = "";
    var gstAmount = "";
    var totalAmountOnGst = "";
    var total = 0;
    var supplierCode = "";
    var totalDiscountAmt = 0;
    var totalGstAmt = 0;
    var totalUnitQty = 0;
    var subtotal = 0;
    var totalAfterGrnDisc = 0;
    var totalRoundOff = 0;
    var totalAfterfreightAmt = 0;
    var totalAftercommissionAmt = 0;
    var mrpOnDisc = 0;
    var tableData = {};

    // ---- This block is to mimic jQuery API call response. I am using your own data ---- //

    sellersList = [
        {
            "SupplierCode": "0001",
            "SupplierName": "Amazon"
        },
        {
            "SupplierCode": "0002",
            "SupplierName": "FlipKart"
        },
        {
            "SupplierCode": "0003",
            "SupplierName": "eBay"
        }
    ];

    listOfItemsBySellerCode = {
        "0001" : {
            "ALMOND CHBAR" : {
                "itemName": "ALMOND CHBAR",
                "itemCode": "2402",
                "costPrice": 20.0,
                "gstPercentage": 14.5,
                "mrp": 30.0
            },
            "A BR SB EX~333" : {
                "itemName": "A BR SB EX~333",
                "itemCode": "333",
                "costPrice": 1.0,
                "gstPercentage": 0.0,
                "mrp": 20.0
            }
        },
        "0002" : {
            "iPhone SE": {
                "itemName": "iPhone SE",
                "itemCode": "2001",
                "costPrice": 15700.0,
                "gstPercentage": 14.5,
                "mrp": 20000.0
            },
            "Remi Note 5": {
                "itemName": "Remi Note 5",
                "itemCode": "2095",
                "costPrice": 25000.0,
                "gstPercentage": 13.0,
                "mrp": 28745.0
            }
        },
        "0003" : {
            "Levi's Jeans": {
                "itemName": "Levi's Jeans",
                "itemCode": "1309",
                "costPrice": 3750.0,
                "gstPercentage": 14.5,
                "mrp": 4120.0
            },
            "Fastrack M135": {
                "itemName": "Fastrack M135",
                "itemCode": "3401",
                "costPrice": 6789.0,
                "gstPercentage": 9.06,
                "mrp": 7459.0
            }
        }

    }

    function ajax_response_for_sellers_list (response) {
        return function (params) {
            params.success(sellersList);
        };
    }

    function ajax_response_for_items_sold_by_seller (response) {
        return function (params) {
            params.success(listOfItemsBySellerCode[params.data.supplierCode])
        }
    }

    // ****** Custom API response block ends here ******* //


    // Populate Supplier select options

    // Here I'm telling $.ajax to return with the seller data which I already have in my variable (for now). This way I don't even need to fire the API. 
    // But you can assume your API will respond in this JSON structure
    $.ajax = ajax_response_for_sellers_list();

    $.ajax({
        'url': '/mockAPI/to/get/suppliersData',
        'method': "GET",
        'dataType': "json",
        'contentType': "application/json; charset=utf-8",
        'success': function (response) {
            console.log('Our Mock API responding with list of all sellers : ')
            console.log(response);

            let dropdown = $('#supplierInput');
            dropdown.empty();
            dropdown.append('<option selected="true" disabled>Select Supplier</option>');
            dropdown.prop('selectedIndex', 0);
            $.each(response, function (key, entry) {
                dropdown.append($('<option></option>').attr('value', entry.SupplierCode).text(entry.SupplierName));
            });

        },
        'error': function (err) {

        }
    });

    // Here I'm telling $.ajax to return all items sold by a seller (seller is identified by code)
    // You can assume your API will respond in this JSON structure
    $.ajax = ajax_response_for_items_sold_by_seller();

    $("#supplierInput").on("change", function (e) {
        var supplierInvNo = $("#supplierInvNoInput").val();
        $('#grnReceivingForm input[type="text"]').val('');
        $('#grnReceivingForm input[type="tel"]').val('0.00');
        $("tbody").empty();
        $("tfoot").empty();

        supplierCode = jQuery(this).find(":selected").val();
        $('.loader').show();
        $('.overlay').show();
        $.ajax({

            url: "/mockAPI/to/get/items/based/on/sellercode",
            method: "POST",
            dataType: "json",
            data: {
                supplierCode: supplierCode  // sending supplier code
            },
            contentType: "application/json; charset=utf-8",
            success: function (response) {

                console.log('Our Mock API responding with all items sold by the selected seller : ', supplierCode)
                console.log(response);

                $("#tfootTable").show();
                populateData(response)
            },
        });
    });

    function rowappend(tbody) {
        const markup =
            `<tr>
                <td>
                    <input type="text" class="form-control commanChange" id="itemNametd" name="itemNametd">
                </td>
                <td><input type="text" name="itemCodetd" id="itemCodetd" class="form-control commantd" readonly="readonly"></td>
                <td><input type="text" name="mrptd" id="mrptd" class="form-control commantd" readonly="readonly"></td>
                <td><input type="text" name="purRatetd" id="purRatetd" class="form-control commantd"></td>
                <td>
                    <input type="tel" id="unitQtytd"class="form-control commanChange" name="unitQtytd">
                </td>

                <td>
                    <input type="tel" id="discPercentagetd"class="form-control commanChange" name="discPercentagetd" >
                </td>
                <td><input type="text" name="discAmttd" id="discAmttd" class="form-control commantd" readonly="readonly"></td> 
                <td><input type="text" name="gstPercentagetd" id="gstPercentagetd" class="form-control commantd" readonly="readonly"></td>
                <td><input type="text" name="gstAmttd" id="gstAmttd" class="form-control commantd" readonly="readonly"></td>
                <td><input type="text" name="totalAmttd" id="totalAmttd" class="form-control commantd" readonly="readonly"></td>
                <td style="background-color: white;border: 1px white"><i class="fas fa-times fa-2x remove-btn"></i></td>

            </tr>`

        $(tbody).append(markup);
        setTimeout(() => $("[name=itemNametd]", tbody).last().focus(), 100);

        // Bind autocomplete data
        var autoCompleteData = Object.keys(tableData);
        $("[name=itemNametd]", $('tbody', '#tableInvoice')).last().autocomplete({
            source: autoCompleteData
        }).data('tableData', tableData); // <----   added...
    }

    function getValues(row) {
        const search = ($('[name=itemNametd]', row).val()).toString()
        console.log("search  : " + search);
        var data = $('[name=itemNametd]', row).data('tableData'); // <--- added
        const value = data[search]; // this one is causing issue

        // Check first if the user is selecting an `existing` data object
        if (value) {
            CostPrice = value.costPrice;

            if (value) {
                $(row).find("[name=itemCodetd]").val(value.itemCode);
                $(row).find("[name=mrptd]").val(value.mrp);
                $(row).find("[name=purRatetd]").val(CostPrice);

                $(row).find("[name=gstPercentagetd]").val(value.gstPercentage);
            }
        }
    }

    function calc(row) {
        unitQuantity = $(row).find("[name=unitQtytd]").val() || '0';
        purchaseRate = $(row).find("[name=purRatetd]").val() || '0';
        var mrp = $(row).find("[name=mrptd]").text() || '0';
        totalAmount = (parseFloat(unitQuantity) * parseFloat(purchaseRate));

        $(row).find("[name=totalAmttd]").val((totalAmount));

    }

    function calcDiscount(row) {
        unitQuantityOnDisc = $(row).find("[name=unitQtytd]").val() || '0';
        purchaseRateOnDisc = $(row).find("[name=purRatetd]").val() || '0';
        mrpOnDisc = $(row).find("[name=mrptd]").val() || '0';
        subTotalOnDisc = (parseFloat(unitQuantityOnDisc) * parseFloat(purchaseRateOnDisc));
        discPercentage = $(row).find("[name=discPercentagetd]").val() || '0';
        gstPercentage = $(row).find("[name=gstPercentagetd]").val() || '0';

        discAmount = (parseFloat(discPercentage) / 100) * parseFloat(totalAmount);
        totalAmountOnDisc = (parseFloat(totalAmount) - parseFloat(discAmount))
        gstAmount = (parseFloat(gstPercentage) / 100) * parseFloat(totalAmountOnDisc);
        totalAmountOnGst = (parseFloat(totalAmountOnDisc) + parseFloat(gstAmount))
        total += parseFloat(totalAmountOnGst);
        totalDiscountAmt += parseFloat(discAmount);
        totalGstAmt += parseFloat(gstAmount);
        totalUnitQty += parseFloat(unitQuantity);
        subtotal += parseFloat(subTotalOnDisc);
        totalRoundOff = total - Math.round(total);


        $(row).find("[name=discAmttd]").val((discAmount));
        $(row).find("[name=gstAmttd]").val((gstAmount));
        $(row).find("[name=totalAmttd]").val((totalAmountOnGst));

        $("#unitQtytf").text((totalUnitQty));
        $("#discAmttf").text((totalDiscountAmt));
        $("#gstAmttf").text((totalGstAmt));
        $("#netAmtInput").val((total));
        $("#totalAmttf").text((total));
        $("#subTotalInput").val((subtotal));
        $("#itemAmtDiscinput").val((totalDiscountAmt));
        $("#taxAmtInput").val((totalGstAmt));
        //    $("#roundOffAmtInput").val(format(totalRoundOff));


    }

    $(document).on('focusout', '[name=itemNametd]', function (e) {
        var row = jQuery(this).parent().parent();

        // Get row values
        getValues(row);

        // Focus next
        console.log('focusing next', row.find("[name=purRatetd]").length);
        row.find("[name=purRatetd]").focus();
    });


    $(document).keypress(function (event) { // here I am trying to create new row when enter is clicked
        const row = event.target.parentElement.parentElement
        if (event.target.matches('[name=discPercentagetd]')) {
            var keycode = event.keyCode || event.which;
            if (keycode == '13') {
                alert("presed")
                calcDiscount(event.target.parentElement.parentElement)
                if ($(row).parent().find('tr').length - $(row).index() === 1) {
                    rowappend(event.target.parentElement.parentElement.parentElement)

                    total = 0;
                    totalDiscountAmt = 0;
                    totalGstAmt = 0;
                    totalUnitQty = 0;
                    subtotal = 0;

                    $("#tableInvoice tbody tr").each(function () {
                        calc(this)
                        calcDiscount(this)
                    })
                }
            }
        }





    });
    document.addEventListener("keydown", function (e) {

        const row = e.target.parentElement.parentElement
        if (event.target.matches('[name=discPercentagetd]') || e.target.matches('[name=unitQtytd]')) {

            var keycode = e.keyCode || event.e;
            if (keycode == '9') {


                if (!$(event.target).val()) {
                    e.preventDefault();
                    return;
                }


                total = 0;
                totalDiscountAmt = 0;
                totalGstAmt = 0;
                totalUnitQty = 0;
                subtotal = 0;

                $("#tableInvoice tbody tr").each(function () {
                    calc(this)
                    calcDiscount(this)
                })


            }

        }


    });
    $("#clear").click(function (e) {
        $("tbody").empty();
        $("tfoot").empty();
        $('#supplierInput option').prop('selected', function () {
            return this.defaultSelected;
        });
    });

    function rowappendTfoot(tfoot) {

        const tfootmarkup =
            `<tr>
            <td id="itemNametf" class="commantf" align="center">Total ->
            </td>
            <td id="itemCodetf" class="commantf"></td>
            <td id="mrptf" class="commantd"></td>
            <td id="purRatetf" class="commantf"></td>
            <td id="unitQtytf" class="commantf"></td>
            <td id="discPercentagetf" class="commantf"></td>
            <td id="discAmttf" class="commantf"></td>
            <td id="gstPercentagetf" class="commantf"></td>
            <td id="gstAmttf" class="commantf"></td>
            <td id="totalAmttf" class="commantf"></td>
            <td id="crossBtntf" class="commantf"></td>
        </tr>`

        $(tfoot).append(tfootmarkup);

    }

    function populateData(data) {
        tableData = Object.assign({}, data);
        var autoCompleteData = Object.keys(data);
        rowappend($('tbody', '#tableInvoice'));
        rowappendTfoot($('tfoot', '#tfootTable'))
    }
</script>