使用jquery

时间:2017-05-09 06:31:25

标签: javascript jquery asp.net-mvc

我在表格的每一行都有一个更改状态的下拉列表。此下拉列表将通过Ajax调用更改当前行的状态。如果新状态未完成或取消,我们应该在其他链接之后看到当前行的最后一列中的编辑链接。

  $(".state-select-container").change(function () {
            var id = $(this).attr("data-id");
            var state = $(this).val();
            var url = "/MyController/ChangeState?requestId=" + id + "&state=" + state;
            var that = $(this);

            $.post(url, function (data) {
                if (data.updated) {
                  //some other codes
                    if (state !== 'Cancel' && state !== 'Done') { //Edit is authorized
                        var href = '/MyController/Edit?requestId='+ id +'"';

  //WHAT IS THE CORRECT CODE HERE? THE CODE, BELOW,
  //ADDS THE LINK AFTER THE CURRENT ROW, NOT IN LAST COLUMN, AFTER LAST SPAN

                        that.closest("tr").last('td').last('span')
                            .after('<a href="'+href+'">Edit</a>');
                     }

                } else {
                    alert("Error!");
                }
             });
        });

.cshtml是:

 <table>
 foreach (var item in ViewBag.SearchResult)
 {
 <tr>
   <td>
     <div>
       <select class="state-select-container" data-id="@item.Id">
          @{
             foreach (var state in states)
             {
               <option value="@state.Value"
                  @(item.State[0].ToString()==state.Value ?"selected":"")>
                        @state.Text
               </option>
              }
           }
        </select>
      </div>
    </td>

    <td>
      <span>
         <a data-id="@item.Id" href='its href' data-toggle="tooltip"></a>
      </span>
       @if (item.IsEditAuthorized)
         {
          <a href='@Url.Action("Edit", "MyController", new {requestId = @item.Id}, null)'>Edit</a>
          }
     </td>

    </tr>
    }
 </table>

4 个答案:

答案 0 :(得分:0)

您的js代码似乎没问题,但您的HTML代码是ba,也许您关闭了第一个锚标记:

<a data-id="@item.Id" href='its href' data-toggle="tooltip"></a>

编辑:

好的,html代码没问题,但是last()jquery函数不接受参数(https://api.jquery.com/last/)。所以JYoThI的评论是正确的,或使用最后一个函数:     $(本).closest( “TR”)。找到( 'TD')。最后的()。找到( '跨度')。最后()

答案 1 :(得分:0)

像这样使用

that.closest("tr").find('td:last-child').find('span:last-chi‌​ld').after('<a href="'+href+'">Edit</a>');

Read Documentation last()

  

注意:last()此方法不接受任何参数。

答案 2 :(得分:0)

尝试以下代码

    that.closest("tr").last().append('<a href="'+href+'">Edit</a>');

答案 3 :(得分:0)

尝试使用此代码,

that.closest("tr").children('td:last').children('span:last').after('<a href="'+href+'">Edit</a>');