Ajax调用成功后无法选中表格tr更新td文本值的问题求助
问题根因
你的代码存在3个问题导致更新失效:
- 元素查找逻辑错误:
$("#EditTbl tbody tr."+data.trIndex)选中的是目标<tr>元素本身,你直接对这个jQuery对象调用.eq(),本质是在匹配到的tr集合里按索引取tr,完全没有查找tr内部的td元素,自然无法写入值。 - td索引匹配错误:对照你的HTML结构,tr内td从0开始计数的顺序为:
- 0:Date列
- 1:BL Number列
- 2:Pick Up Number列
- 3:Carrier列
- 4:Submitted By列
- 5:Edit按钮列
你原代码把Pick Up Number赋值给索引3的位置,会和Carrier列错位,Submitted By赋值给索引5会直接覆盖Edit按钮所在列。
- 选择器兼容隐患:如果
data.trIndex是纯数字开头的值,直接拼接成类选择器会违反CSS选择器语法规则,直接导致选不到目标tr。
修正代码
只需要修改ajax成功回调内的逻辑即可:
function SaveEditInfo(id,pickup,carrier) { $.ajax({ type: "POST", url: "/Loading/SaveEditInfo", data: { id: id, pickup: pickup,carrier:carrier}, success: function (data) { // 选中目标行,兼容数字开头的索引值 var $tblRow = $("#EditTbl tbody tr[class*='"+ data.trIndex +"']"); // 加空判断避免后续报错 if (!$tblRow.length) return; // 先取到行内所有td,再按正确索引赋值 var $tdList = $tblRow.find("td"); $tdList.eq(2).text(data.pickUpNo); // Pick Up Number列 $tdList.eq(3).text(data.carrier); // Carrier列 $tdList.eq(4).text(data.logisticUser); // Submitted By列 } }); }
如果可以修改Razor模板,建议把tr的类名从@item.TrIndex改成row-@item.TrIndex,后续选行就可以直接用性能更好的类选择器:var $tblRow = $("#EditTbl tbody tr.row-"+data.trIndex),彻底避免类名语法问题。
优化建议
靠索引匹配td很容易因为后续调整列顺序失效,更稳妥的方式是渲染时给业务td加专属类名,比如:
<!-- Razor渲染部分给对应td加类 --> <td class="pickup-no-col"> @Html.DisplayFor(modelItem => item.PickUpNo) </td> <td class="carrier-col"> @Html.DisplayFor(modelItem => item.Carrier) </td> <td class="submit-user-col"> @Html.DisplayFor(modelItem => item.LogisticUser) </td>
更新的时候直接按类查找,不用数索引:
$tblRow.find(".pickup-no-col").text(data.pickUpNo); $tblRow.find(".carrier-col").text(data.carrier); $tblRow.find(".submit-user-col").text(data.logisticUser);
内容的提问来源于stack exchange,提问作者tachidow
相关产品推荐
相关产品推荐

