我在表格的每一行都有一个更改状态的下拉列表。此下拉列表将通过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>
答案 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-child').after('<a href="'+href+'">Edit</a>');
注意: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>');