【问题标题】:How to get data from each dynamically generated cell in a jQuery Table如何从 jQuery 表中的每个动态生成的单元格中获取数据
【发布时间】:2020-05-24 13:03:04
【问题描述】:

我正在尝试从 jQuery 表中动态生成的单元格获取数据,但总是遇到同样的问题,我的数据是“未定义的”。有人可以帮助我或提供任何建议吗?

我的代码:

function loadWeekData() {

    // Append database data here

    $.ajax({
        type: "GET",
        url: "/Home/JsonWeekEvents",
        dataType: "JSON",
        success: function (result) {
            $.each(result, function (i, val) {
                var trow = $('<tr/>').data("id", val.Id);
                //trow.append('<td>' + val.Id + "&nbsp;" + '</td>');
                trow.append('<td style="padding:5px; width:100px; height:70px"></td>');
                trow.append('<td valign="top" style="padding:2px; width:150px; height:100px">' +
                    '<div class="ui-widget">' +
                    '<input  size="10" maxlength="10" id="tagsM" class="tags" />' +
                    '<input type="button" id="addBtn" class="addEvent" size="5" value="+" /><br/>' +
                    '<div style="text-align:center" id="monVal" class="desc_Num">' + val.Monday + '</div >' +
                    '<input type="hidden" class="idEvent" />' +
                    '</div >' +
                    '</td>');
                trow.append('<td valign="top" style="padding:2px; width:150px; height:100px">' +
                    '<div class="ui-widget">' +
                    '<input  size="10" maxlength="10" id="tagsT" class="tags" />' +
                    '<input type="button" id="addBtn" class="addEvent" size="5" value="+" /><br/>' +
                    '<div style="text-align:center" class="desc_Num">' + val.Tuesday + '</div >' +
                    '<input type="hidden" class="idEvent" />' +
                    '</div >' +
                    '</td>');
                trow.append('<td valign="top" style="padding:2px; width:150px; height:100px">' +
                    '<div class="ui-widget">' +
                    '<input  size="10" maxlength="10" id="tagsW" class="tags" />' +
                    '<input type="button" id="addBtn" class="addEvent" size="5" value="+" /><br/>' +
                    '<div style="text-align:center" class="desc_Num">' + val.Wednesday + '</div >' +
                    '<input type="hidden" class="idEvent" />' +
                    '</div >' +
                    '</td>');
                trow.append('<td valign="top" style="padding:2px; width:150px; height:100px">' +
                    '<div class="ui-widget">' +
                    '<input  size="10" maxlength="10" id="tagsTr" class="tags" />' +
                    '<input type="button" id="addBtn" class="addEvent" size="5" value="+" /><br/>' +
                    '<div style="text-align:center" class="desc_Num">' + val.Thursday + '</div >' +
                    '<input type="hidden" class="idEvent" />' +
                    '</div >' +
                    '</td>');
                trow.append('<td valign="top" style="padding:2px; width:150px; height:100px">' +
                    '<div class="ui-widget">' +
                    '<input  size="10" maxlength="10" id="tagsFr" class="tags" />' +
                    '<input type="button" id="addBtn" class="addEvent" size="5" value="+" /><br/>' +
                    '<div style="text-align:center" class="desc_Num">' + val.Friday + '</div >' +
                    '<input type="hidden" class="idEvent" />' +
                    '</div >' +
                    '</td>');
                trow.append('<td valign="top" style="padding:2px; width:150px; height:100px">' +
                    '<div class="ui-widget">' +
                    '<input  size="10" maxlength="10" id="tagsSt" class="tags" />' +
                    '<input type="button" id="addBtn" class="addEvent" size="5" value="+" /><br/>' +
                    '<div style="text-align:center" class="desc_Num">' + val.Saturday + '</div >' +
                    '<input type="hidden" class="idEvent" />' +
                    '</div >' +
                    '</td>');
                trow.append('<td valign="top" style="padding:2px; width:150px; height:100px">' +
                    '<div class="ui-widget">' +
                    '<input  size="10" maxlength="10" id="tagsSu" class="tags" />' +
                    '<input type="button" id="addBtn" class="addEvent" size="5" value="+" /><br/>' +
                    '<div style="text-align:center" class="desc_Num">' + val.Sunday + '</div >' +
                    '<input type="hidden" class="idEvent" />' +
                    '</div >' +
                    '</td>');
                trow.append('<td  style="padding:2px; width:100px; height:70px"><a href="#" rel="events-week-edit" class="edit">Edit Week</a></td>');
                tab.append(trow);
            });

            $("tr:odd", tab).css('background-color', '#C4C4C4');
            $("#weekEvents").html(tab);
        },
        error: function () {
            alert("Failed! Please try again.");
        }
    });
    var tab = $('<table class=MyTable border=1 ></table>');
    var thead = $('<thead></thead>');

    thead.append('<th style="padding:5px">FSE' + "&nbsp;" + '</th>');
    thead.append('<th style="padding:5px">Monday' + "&nbsp;" + '</th>');
    thead.append('<th style="padding:5px">Tuesday' + "&nbsp;" + '</th>');
    thead.append('<th style="padding:5px">Wednesday' + "&nbsp;" + '</th>');
    thead.append('<th style="padding:5px">Thursday' + "&nbsp;" + '</th>');
    thead.append('<th style="padding:5px">Friday' + "&nbsp;" + '</th>');
    thead.append('<th style="padding:5px">Saturday' + "&nbsp;" + '</th>');
    thead.append('<th style="padding:5px">Sunday' + "&nbsp;" + '</th>');

    tab.append(thead);

    tab.on("focus", ".tags", function (e) {

        //var prefix = $('.tags').val();

        $(this).autocomplete({
            source: function (request, response) {
                $.ajax({
                    url: "/Home/GetSearchValue",
                    dataType: "json",
                    data: {
                        search: request.term
                    },
                    success: function (data) {
                        response($.map(data, function (item) {
                            return {

                                label: item.Title + ', ' + item.Description, value: item.Title,

                                Id: item.Id,
                                Title: item.Title,
                                Description: item.Description,
                                Location: item.Location
                            }
                        }));
                    },
                    error: function (xhr, status, error) {
                        alert("Error!" + xhr);
                    }
                });

            },
            select: function (event, ui) {
                var field_id = $(this).closest("div").find(".idEvent");
                field_id.val(ui.item.Id);

            }
        });


    });

    tab.on("click", ".addEvent", function (e) {
        var id = $(this).closest("div").find(".idEvent").val();
        var field = $(this).closest("div").find(".desc_Num");
        var select = $(this).closest("div").find(".tags");
        $.ajax({
            type: "GET",
            url: "/Home/AutoEventDetails",
            data: { id: id },
            dataType: "JSON",
            success: function (data) {
                var res = $('<p>' + data.Title + '<br/>' + data.Description + '<br/>' + data.Location + '</p>');
                field.html(res);
                select.val('');
            }


        });
    });

    tab.on("click", ".edit", function (e) {

        var tr = $(this).closest("tr");
        var id = tr.data("id");
        var div = $(this).closest("div").find("monVal");
        var mon = div.val();

        //var mon = $(this).get(".desc_Num").val();
        //var res = $('');
        //res.append(mon);
        //$("#test").html(res);

        alert("ok" + id + mon );
    });
}

在最后一个“tab.on”中,我试图从“星期一”单元格中获取数据,但它总是“未定义”...

有人有想法吗?

我只想获取所有日子的所有数据以传递它,然后在 Ajax“POST”函数中将其写入数据库。

【问题讨论】:

    标签: jquery asp.net-mvc datatables asp.net-ajax


    【解决方案1】:

    你必须改变这一行

     var div = $(this).closest("div").find("monVal");
    

    进入

     var div = $(this).closest("div").find("#monVal");
    

    因为您要查找的 &lt;div&gt; 具有 id monval。

    另外你必须改变

     var mon = div.val();
    

    进入

     var mon = div.text();
    

     var mon = div.html();
    

    作为&lt;div&gt; 元素没有您可以通过val() 获得的价值。

    【讨论】:

    • 它不再是“未定义”,但在警报对话框中我看不到数据...
    • @Dimitri 我刚刚更新了我的答案,因为我发现了第二个错误,请使用更新后的调整重试。
    • @Dimitri 很高兴我能帮上忙 :)
    • 不知何故,它只显示第一行的数据,如果我有 2 行并单击第二行的链接,我可以看到来自正确单元格的数据,但是来自错误行的 id 是对,介于两者之间……
    • @Dimitri 你能用你的代码做一个小提琴吗?很难根据您问题的代码给出任何建议,尽管它应该可以工作,因为您可以根据单击的编辑链接选择最接近的 并根据应该是唯一的 id 选择内容。
    猜你喜欢
    • 1970-01-01
    • 2021-05-16
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    相关资源
    最近更新 更多