如何使用jQuery从foreach表TD获取值

时间:2019-04-24 15:22:14

标签: jquery asp.net-mvc

我有一个通过从MVC控制器制作视图而构建的表。吐出一排排。

我有一个ajax调用,该调用将数据提交到控制器以进行数据输入。我需要所选列的第一个td。

当只有一行存在时,我能够完成此操作,但是当我添加第二行时,调用会从上面的行和选定的行中提取值。

我只想要该特定行的一个值(Id)。

这是桌子。

<table class="table  table-striped table-hover  col-xl-12" id="policyTable">
<tr class="thead-dark">
    <th class="toggleMe1">
        UnderWriter
    </th>
    <th class="toggleMe2">
        @Html.DisplayNameFor(model => model.Client)
    </th>

    <th>
        Exp-Policies
    </th>

    <th>
        Exp-Date
    </th>
</tr>

@foreach (var item in Model)
{
    <tr id="id_@item.Id">

        <td class="hideMe">
            @Html.DisplayFor(modelItem => item.Id)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.NewUw)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Client)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Expiring_Policies)
        </td>

        <td>
            @Html.DisplayFor(modelItem => item.ExpDate)

        <td style="width: 25%; height: 120px;">
            <div class="form-group">
                @* @Html.LabelFor(model => model.Notes, htmlAttributes: new { @class = "control-label col-md-2" })*@
                <div class="col-md-12">
                    @Html.TextAreaFor(modelItem => item.Notes, new { @class = "form-control textAreaCS", @rows = 8 })
                    @Html.ValidationMessageFor(modelItem => item.Notes, "", new { @class = "text-danger" })
                </div>
            </div>
            <div class="col-12 ml-3">
                <div class="row">
                   @* <input type="submit" value="Save" id="notes" class="btn btn-outline-primary btn-sm col-2" style="font-size: 16px" />*@

                    <div class="col-12">
                        @if (TempData["SM"] != null)
                        {
                            <div class="alert alert-success text-center text-capitalize" style="font-size: 16px;">
                                @TempData["SM"]
                            </div>
                        }
                    </div>
                </div>

            </div>
        </td>
        <td>
            <button type="button" class="btn btn-info btn-sm">
                @Html.ActionLink("Review", "EditPolicy", new { id = item.Id }, new { @class = "review" })
            </button>
           <br/>
            <button type="button" class="btn btn-primary mt-5" data-toggle="modal" data-target="#ColumnModal">
                Notes
            </button>
        </td>
    </tr>
}

</table>

这是我用来捕获所需值的jQuery

 $('#ColumnModal').on('show.bs.modal', function () {

                //find the correct Id associated with the row. 
                var id = $('td:first-child').text();
                var policyNotes = $("#textForNotes").focus();
                //var id = $('td:first-child').text();
                var comment = $.trim($("modal#textForNotes").val());
                $('#submit').on('click', function () {

                    var data = JSON.stringify({ 'Id': id, 'polNotes': $('#textForNotes').val() });
                    console.log(id + $('#textForNotes').val()); 



                   /* Commented out for simplicity 
                      $.ajax({
                        url: '/Policy/CompletedNotes',
                        type: 'POST',
                        contentType: 'application/json',
                        data: data,
                        success: function () {
                            //alert('success');
                            console.log('success');
                        },
                        error: function () {
                            //alert('Error');
                            console.log('Error');
                        }
                    })
                    */
                   // location.reload();

                });


            })

我有一个模态出现并捕获ID和一些文本。它本身就可以捕获一行。对于多行则没有。我如何首先将值捕获隔离到特定行?

编辑:

我尝试了多个Jquery查找来完成此任务。一切都返回上面的值。这是一个..及其许多变体。

var id = $('#policyTable tr').find(' td:first-child').text();

浏览器到显示输出的附加内容:

我目前在表格中显示三行。因此,它将捕获所有三个ID并将其打印到控制台中

CompletedPolicies:488 
            359 //row 1

            471 // row 2 .. I clicked on this one

            474 // row 3
        This is just a test

我还有一个额外的测试,但它捕获了行中的所有内容。真的没用

2 个答案:

答案 0 :(得分:0)

尝试一下:

var id = $('#policyTable tr').children('td')[0].text();

我认为这是可行的。

答案 1 :(得分:0)

因此,我无法像上面那样获得合理的解决方案。一时兴起,我尝试了上一个项目中的一些东西。我知道,如果我仅能隔离自己想要的价值,那么我将能够做我需要的其他一切。因此,不要使用按钮来调用模式,而是捕获未知的行ID(我认为这是发生了什么。它不知道具体捕获哪个值。)我使行本身可单击。并在该点击时调用模式。从那里我可以隔离我需要的值。我在foreach中将“ clickable-row”作为一个类。这是单击后我进行的Jquery调用。捕获了我所需要的。

 $('#policyTable').on('click', '.clickable-row', function (event) {

           //Capture the row Id 
            var id = $(this).closest('tr').children('td:first').text();

            //Listen for modal button to be clicked
            $('#ColumnModal').on('show.bs.modal', function () {

                var policyNotes = $("#textForNotes").focus();

                var comment = $.trim($("modal#textForNotes").val());

                //Listen for submit button. Then send AJAX .post call to controller
                $('#submit').on('click', function () {

                    var data = JSON.stringify({ 'Id': id, 'polNotes': $('#textForNotes').val() });
                    console.log(id + $('#textForNotes').val());
                     $.ajax({
                         url: '/Policy/CompletedNotes',
                         type: 'POST',
                         contentType: 'application/json',
                         data: data,
                         success: function () {
                             //alert('success');
                             console.log('success');
                         },
                         error: function () {
                             //alert('Error');
                             console.log('Error');
                         }
                     })
                     location.reload();

                });


            })



            /*  $.get(url, Id, function (data) {
                  $(".content").html(data);
                  alert("your id is " + data);
              })*/
        })