在 c# 中的每个 ajax 调用中删除带有 gif 图像的行下方的行
Remove row below the row with gif image on every ajax call in c#
不幸的是,它在每次 ajax 调用时都会向 table 添加行:
如果我删除下面的代码,它可以很好地用于多个 open/collapse 功能
if ($('#tableOrderDetail_' + index + ' tr tr').length <= 1)
长度保持 1 一次,在第二次调用时长度大于 1,因此它不会进入 if condition
<tr>
<td id="lding<%#Container.ItemIndex + 1 %>" style="display: none;">
<p>Loading....</p>
<img id="imgld" src="../img/loading.gif" alt="loading.." height="75px;" width="100px;" />
</td>
</tr>
与 table 称为
$('#tableOrderDetail_' + index + ' tr')
但是使用下面的代码,它会在每次 ajax 调用我的 table 名称
时继续添加行
$('#tableOrderDetail_' + index + ' tr tr')
这是我的Js代码:
function DisplayPrdWeightGrd(index, OrderId, isAdmin) {
$('#lding' + index).show();
var Admin = isAdmin.toLowerCase();
if ($('#img_' + index).attr("class") == "splashy-arrow_state_grey_expanded") {
$('#img_' + index).attr("class", "splashy-arrow_state_grey_left");
} else {
$('#img_' + index).attr("class", "splashy-arrow_state_grey_expanded");
var Orderid = OrderId;
$.ajax({
type: "POST",
url: "../handlers/DisplayOrderDetail.ashx?OrderId=" + Orderid + "&tk=" + $.now(),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data) {
if ($('#tableOrderDetail_' + index + ' tr tr').length <= 1) {
$.each(data, function(i, v) {
setDataOnRow(index, v, i);
});
}
},
failure: function(response) {
alert("fail");
},
error: function(response) {
alert(response);
}
});
}
function setDataOnRow(idx, v, i) {
$('#tableOrderDetail_' + idx + ' tr:last').after('<tr>' +
'<td width="25%" >' + (i + 1) + '</td>' +
'<td width="25%" class="center">' + v.ProductName + '</td>' +
'<td width="12%" class="center">' + v.NoOfCarton + '</td>' +
'<td width="12%" class="center">' + v.ProductQuantity + '</td>' +
'<td width="12%" class="center">' + v.OriginalPrice + '</td>' +
'<td width="12%" class="center">' + v.OrderPrice + '</td>' +
'<td width="10%" class="center">' + v.Discount + '</td>' +
'<td width="12%" class="center">' + v.TotalPrice + '</td></tr>');
$('#lding' + index).hide();
}
$('#trPwd_' + index).toggle("slow");
}
HTML代码:
<asp:Repeater ID="rpt_us" runat="server" OnItemDataBound="rpt_us_ItemDataBound" OnItemCommand="rpt_us_ItemCommand">
<HeaderTemplate>
<table class="table table-striped table-bordered dTableR">
<thead>
<tr>
<th width="7%">Detail</th>
</tr>
</thead>
<tbody>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td class="center" style="cursor: pointer">
<span onclick="DisplayPrdWeightGrd('<%#Container.ItemIndex + 1 %>','<%# Eval(" OrderId ")%>','<%= Convert.ToBoolean(Utility.IsAdmin()) %>');">
<img id="img_<%#Container.ItemIndex + 1 %>" class="splashy-arrow_state_grey_left" />
</span>
</td>
</tr>
<tr style="display: none" id="trPwd_<%# Convert.ToInt32(Container.ItemIndex + 1) %>">
<td colspan="10" style="horizontal-align: center; padding-bottom: 15px">
<div style="padding-left: 5px; padding-bottom: 3px"> <b>Order Details </b></div>
<table id="tableOrderDetail_<%#Container.ItemIndex + 1 %>" class="table-striped table-bordered" style="align: center; width: 100%;">
<thead>
<tr>
<th width="5%">Sr. No. </th>
<th width="35%">Product Name </th>
</tr>
<tr>
<td id="lding<%#Container.ItemIndex + 1 %>" style="display: none;">
<p>Loading....</p>
<img id="imgld" src="../img/loading.gif" alt="loading.." height="75px;" width="100px;" />
</td>
</tr>
</thead>
<tbody>
</tbody>
</table>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</tbody>
</table>
</FooterTemplate>
</asp:Repeater>
我尝试了调试器并检查了条件
if ($('#tableOrderDetail_' + index + ' tr tr').length <= 1)
其长度每次都保持为 0,因此每次进入 if 条件并生成行
在这里,您的 table 中有两行,这就是您的 if 条件无法正常工作的原因。
你必须改变:
$('#tableOrderDetail_' + index + ' tr tr')
往这边走。
if ($('#tableOrderDetail_' + index).children().children().length <= 2) {
$.each(data, function (i, v) {
setDataOnRow(index, v, i);
});
}
希望对您有所帮助!
不幸的是,它在每次 ajax 调用时都会向 table 添加行:
如果我删除下面的代码,它可以很好地用于多个 open/collapse 功能
if ($('#tableOrderDetail_' + index + ' tr tr').length <= 1)
长度保持 1 一次,在第二次调用时长度大于 1,因此它不会进入 if condition
<tr>
<td id="lding<%#Container.ItemIndex + 1 %>" style="display: none;">
<p>Loading....</p>
<img id="imgld" src="../img/loading.gif" alt="loading.." height="75px;" width="100px;" />
</td>
</tr>
与 table 称为
$('#tableOrderDetail_' + index + ' tr')
但是使用下面的代码,它会在每次 ajax 调用我的 table 名称
时继续添加行 $('#tableOrderDetail_' + index + ' tr tr')
这是我的Js代码:
function DisplayPrdWeightGrd(index, OrderId, isAdmin) {
$('#lding' + index).show();
var Admin = isAdmin.toLowerCase();
if ($('#img_' + index).attr("class") == "splashy-arrow_state_grey_expanded") {
$('#img_' + index).attr("class", "splashy-arrow_state_grey_left");
} else {
$('#img_' + index).attr("class", "splashy-arrow_state_grey_expanded");
var Orderid = OrderId;
$.ajax({
type: "POST",
url: "../handlers/DisplayOrderDetail.ashx?OrderId=" + Orderid + "&tk=" + $.now(),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data) {
if ($('#tableOrderDetail_' + index + ' tr tr').length <= 1) {
$.each(data, function(i, v) {
setDataOnRow(index, v, i);
});
}
},
failure: function(response) {
alert("fail");
},
error: function(response) {
alert(response);
}
});
}
function setDataOnRow(idx, v, i) {
$('#tableOrderDetail_' + idx + ' tr:last').after('<tr>' +
'<td width="25%" >' + (i + 1) + '</td>' +
'<td width="25%" class="center">' + v.ProductName + '</td>' +
'<td width="12%" class="center">' + v.NoOfCarton + '</td>' +
'<td width="12%" class="center">' + v.ProductQuantity + '</td>' +
'<td width="12%" class="center">' + v.OriginalPrice + '</td>' +
'<td width="12%" class="center">' + v.OrderPrice + '</td>' +
'<td width="10%" class="center">' + v.Discount + '</td>' +
'<td width="12%" class="center">' + v.TotalPrice + '</td></tr>');
$('#lding' + index).hide();
}
$('#trPwd_' + index).toggle("slow");
}
HTML代码:
<asp:Repeater ID="rpt_us" runat="server" OnItemDataBound="rpt_us_ItemDataBound" OnItemCommand="rpt_us_ItemCommand">
<HeaderTemplate>
<table class="table table-striped table-bordered dTableR">
<thead>
<tr>
<th width="7%">Detail</th>
</tr>
</thead>
<tbody>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td class="center" style="cursor: pointer">
<span onclick="DisplayPrdWeightGrd('<%#Container.ItemIndex + 1 %>','<%# Eval(" OrderId ")%>','<%= Convert.ToBoolean(Utility.IsAdmin()) %>');">
<img id="img_<%#Container.ItemIndex + 1 %>" class="splashy-arrow_state_grey_left" />
</span>
</td>
</tr>
<tr style="display: none" id="trPwd_<%# Convert.ToInt32(Container.ItemIndex + 1) %>">
<td colspan="10" style="horizontal-align: center; padding-bottom: 15px">
<div style="padding-left: 5px; padding-bottom: 3px"> <b>Order Details </b></div>
<table id="tableOrderDetail_<%#Container.ItemIndex + 1 %>" class="table-striped table-bordered" style="align: center; width: 100%;">
<thead>
<tr>
<th width="5%">Sr. No. </th>
<th width="35%">Product Name </th>
</tr>
<tr>
<td id="lding<%#Container.ItemIndex + 1 %>" style="display: none;">
<p>Loading....</p>
<img id="imgld" src="../img/loading.gif" alt="loading.." height="75px;" width="100px;" />
</td>
</tr>
</thead>
<tbody>
</tbody>
</table>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</tbody>
</table>
</FooterTemplate>
</asp:Repeater>
我尝试了调试器并检查了条件
if ($('#tableOrderDetail_' + index + ' tr tr').length <= 1)
其长度每次都保持为 0,因此每次进入 if 条件并生成行
在这里,您的 table 中有两行,这就是您的 if 条件无法正常工作的原因。
你必须改变:
$('#tableOrderDetail_' + index + ' tr tr')
往这边走。
if ($('#tableOrderDetail_' + index).children().children().length <= 2) {
$.each(data, function (i, v) {
setDataOnRow(index, v, i);
});
}
希望对您有所帮助!