locked
after select data from jquery autocomplete set data into other td RRS feed

  • Question

  • User-1634604574 posted

    i have this code first column is auto complete i want after selected data from first column set data into other td with this code is not set where is the error

                $("#Items_tbl").off("focus", "tr").on("focus", "tbody tr", function () {
    
                    var series = $(this).find("td:eq(1) input").val();
                    var series2 = $(this).find("td:eq(3) input").val();
    
                    for (var i = 1; i < $("#Items_tbl tr").length; i++) {
    
                        $(this).find("td:eq(1) input").autocomplete({
    
                               minLength: 0,
    
            select: function (event, ui) {
    
                $(this).val("");
                $(this).val(ui.item.item_name);
               
    
    
                $.ajax({
                    type: 'POST',
                    url: '/SalesInvoice/Return_Item_Price',
                    data: { Item_name: $('#Items_tbl tr td:nth-child(2)').find("input").val(), Company: $("#companyt").val(), PriceList: $("#price_list").val(), Customer: $("#t_customer").val(), UOM: "", Warehouse: "" },
                    success: function (response) {
                        //if (response == '') {
                        //    $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(12)").find("input").val("0.0");
                        //    $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(20)").find("input").val("0.0");
                        //    $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(5)").find("input").val("1");
                        //    $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(30)").find("input").val($("#Form_CostCenter").val());
                        //    $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(13)").find("input").val(math.multiply(math.bignumber(parseFloat("1")) * parseFloat("0.0")));
                        //}
                        //  else {
                        data = $.map(response, function (item, a) {
                           //  alert(item.Item_Prices)
                            $("#Items_tbl tr:eq('" + i + "') td:eq(12) input").val(item.Item_Prices)
                            // $(this).find("td:eq(12)").find("input").val(item.Item_Prices);
                            //  $('#Items_tbl tr td:nth-child(13)').find("input").val(item.Item_Prices)
                            Qty = $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(5)").find("input").val();
    
                            Exchange_rate = ToFloat("#exchange_rate");
    
                            var balance = item.balance_qty
                            var Conversion_factor = item.Conversion_factor
                            var qty_at_warehouse = math.divide(math.bignumber(parseFloat(balance)), math.bignumber(parseFloat(Conversion_factor)))
    
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(19)").find("input").val(balance);
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(37)").find("input").val(qty_at_warehouse);
    
                            rate = $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(12)").find("input").val();
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(12)").find("input").val(numeral(item.Item_Prices).format($("#NumberFormat").val()));
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(5)").find("input").val("1");
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(13)").find("input").val(numeral(math.multiply(math.bignumber(1), math.bignumber(item.Item_Prices))).format($("#NumberFormat").val()));
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(30)").find("input").val($("#Form_CostCenter").val());
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(42)").find("input").val(item.barcode);
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(20)").find("input").val(numeral(parseFloat(item.Item_Prices)).format($("#NumberFormat").val()) + " " + $("#currency").val());
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(14)").find("input").val(item.item_name);
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(18)").find("input").val(item.Conversion_factor);
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(15)").find("input").val(item.item_code);
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(16)").find("input").val(item.DefaultUOM_ID);
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(34)").find("input").val(item.default_warehouse_ID);
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(35)").find("input").val(item.batch_id);
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(35)").find("input").attr('list', 'Item_Batches');
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(31)").find("input").val(item.expense_account_ID);
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(29)").find("input").val(item.selling_cost_center_ID);
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(17)").find("input").val(item.sales_uom_ID);
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(32)").find("input").val(item.weight_per_unit);
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(33)").find("input").val(math.multiply(math.bignumber(ToFloat(("#Items_tbl tr:eq(" + i + ") td:eq(5) input"))), math.bignumber(item.weight_per_unit)));
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(29)").find("input").val(item.income_account_ID);
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(44)").find("input").val(item.DiscountORAmount);
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(45)").find("input").val(item.discount_percentage);
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(48)").find("input").val(item.price_rule);
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(52)").find("input").val(item.Coverage_By);
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(53)").find("input").val(item.Coverage_Amt);
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(54)").find("input").val(item.Company);
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(37)").find("input").val(item.balance_qty);
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(21)").find("input").val(numeral(math.multiply(math.bignumber(ToFloat(("#Items_tbl tr:eq(" + i + ") td:eq(20) input"))), math.bignumber(Exchange_rate))).format($("#PL_Currency_format").val()) + " " + $("#price_list_currency").val());
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(22)").find("input").val(numeral(math.multiply(math.bignumber(item.Item_Prices), math.bignumber(Exchange_rate))).format($("#PL_Currency_format").val()) + " " + $("#price_list_currency").val());
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(23)").find("input").val(numeral(math.multiply(math.bignumber(ToFloat(("#Items_tbl tr:eq(" + i + ") td:eq(13) input"))), math.bignumber(Exchange_rate))).format($("#PL_Currency_format").val()) + " " + $("#price_list_currency").val());
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(24)").find("input").val($("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(12)").find("input").val() + " " + $("#currency").val());
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(25)").find("input").val(math.multiply(math.bignumber(ToFloat(("#Items_tbl tr:eq(" + i + ") td:eq(12) input"))), math.bignumber(Exchange_rate)) + " " + $("#price_list_currency").val());
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(27)").find("input").val(ToFloat(("#Items_tbl tr:eq(" + i + ") td:eq(13) input")));
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(28)").find("input").val(math.multiply(math.bignumber(ToFloat(("#Items_tbl tr:eq(" + i + ") td:eq(13) input"))), math.bignumber(Exchange_rate)) + " " + $("#price_list_currency").val());
    
                        });
                        // }
                    },
                    dataType: "json"
                }).done(function () {
                    Totales();
                });
    
    
                return false;
    
            },
                    source: function (request, response) {
    
                $.ajax({
                    type: "POST",
                    url: "/AutoComplete/Get_sales_item",
                    data: { term: request.term },
                    dataType: 'json',
                    success: function (data) {
                        // response(data);
                        response(data.slice(0, 20));
                    }
    
                });
            },
            open: function (event, ui) {
               // $('.ui-autocomplete').append('<li class="advance_search"><a href="javascript:$("#ModalAdvanceSearch").modal("show")"><p  style="cursor:pointer;color:#0284f6;font-family:Calibri;font-size:11pt">&nbsp;<img src="@Url.Content("~/img/search_blue.png")" style="width:20px;height:15px" />&nbsp; Advanced Search</p></a></li>  <li class="advance_search"><a href="javascript:$("#ModalAdvanceSearch").modal("show")"><p  style="cursor:pointer;color:#0284f6;font-family:Calibri;font-size:11pt">&nbsp;&nbsp;<img src="@Url.Content("~/img/plus.png")" style="width:10px;height:10px" />&nbsp; Create a New Customer</p></a></li>'); //See all results
                $('.ui-autocomplete').append('<li class="advance_search"><a href="javascript:$("#ModalAdvanceSearch").modal("show")"><p  style="cursor:pointer;color:#0284f6;font-family:Calibri;font-size:11pt">&nbsp;<img src="@Url.Content("~/img/search_blue.png")" style="width:20px;height:15px" />&nbsp; Advanced Search</p></a></li>'); //See all results
    
                $(".advance_search").click(function () {
                    $("#ModalAdvanceSearch").modal("show")
                })
            },
    
        }).focus(function () {
            if (this.value == "") {
                $(this).autocomplete("search");
            }
        }).autocomplete('instance')._renderItem = function (ul, item) {
    
            return $("<li>").append("<div style='font-size:10pt;font-weight:bold'>" + item.item_name + "<p style='font-size:8pt;font-family:Calibri;font-weight:bold'></p>" + "</div>").appendTo(ul)
                    }
                        
                    }
    
                })

    those highlited code should set data to it which is return from sql db

    Friday, October 25, 2019 6:04 PM

Answers

  • User-719153870 posted

    Hi zhyanadil,

    I did a simple test and reproduced your issue, the pronlem seems to be that in a for loop, the ajax will excute at last together for correct times with incorrect value which in your case $("#Items_tbl tr").length which should not be executed.

    To solve this problem, you can refer to jQuery ajax inside a loop problem, do your ajax in a function.

    Also check below demo:

    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>AutoComplete</title>
        <script src="~/Scripts/jquery-3.3.1.min.js"></script>
        <script>
            $(function () {
                for (var i = 1; i < $("#Items_tbl tr").length; i++) {
                    doAjax(i);
                }
    
                function doAjax(i) {
                    $.ajax({
                        type: 'POST',
                        url: '/Demo/Return_Item_Price',
                        data: { a: "123" },
                        success: function (response) {
                            $("#Items_tbl").find("tr:eq(" + i + ")").find("td:eq(0)").find("input").val(response + i);
                        }
                    });
                }
            })
        </script>
    </head>
    <body>
        <div>
            <table id="Items_tbl">
                <tr>Title</tr>
                <tr>
                    <td>
                        <input type="text" />
                    </td>
                </tr>
                <tr>
                    <td>
                        <input type="text" />
                    </td>
                <tr>
                    <td>
                        <input type="text" />
                    </td>
                </tr>
            </table>
        </div>
    </body>
    </html>
    [HttpPost]
            public string Return_Item_Price(string a)
            {
                string stra = a;
                return stra;
            }

    Here's the result:

    Best Regard,

    Yang Shen

    • Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
    Monday, October 28, 2019 4:04 AM