У меня есть эта функция javascript:
function modifica(txtValoreID, txtRicalcolatoID, lblDeltaID) {
// Ricalcolo il valore aggiornato
var Valore = parseFloat($("#" + txtValoreID).val()).toFixed(2);
var Ricalcolato = parseFloat($("#" + txtRicalcolatoID).val()).toFixed(2);
$("#" + lblDeltaID).html(parseFloat(Valore - Ricalcolato).toFixed(2).replace('.', ','));
}
Это относится к текстовому полю и метке в представлении сетки:
<asp:TemplateField>
<ItemTemplate>
<asp:TextBox ID="txtValore" Width="90%" Text='<%# string.Format("{0:N}", Eval("Valore"))%>' runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:TextBox ID="txtRicalcolato" Text='<%# string.Format("{0:N}", Eval("Ricalcolato")) %>' runat="server" />
</ItemTemplate>
</asp:TemplateField>
(...)
<asp:TemplateField HeaderText="Delta">
<ItemTemplate>
<asp:Label ID="lblDelta" Text='<%# string.Format("{0:N}", Eval("Delta"))%>' runat="server" />
</ItemTemplate>
</asp:TemplateField>
И я назначаю его в DataBound:
txtValore.Attributes.Add("onchange", "modifica('" + txtValore.ClientID + "', '" + txtRicalcolato.ClientID + "','" + lblDelta.ClientID + "')");
txtRicalcolato.Attributes.Add("onchange", "modifica('" + txtDaLiquidare.ClientID + "', '" + txtRicalcolato.ClientID + "','" + lblDelta.ClientID + "')");
и он работает отлично. Проблема в том, что когда в gridview много записей, привязка данных влияет на производительность, поэтому мой первый вопрос: улучшаю ли я эту производительность, перемещая назначение из кода сервера с привязкой данных на страницу aspx? И если да, то как я могу это сделать? Потому что я пытаюсь так:
asp:TextBox ID="txtValore" onchange="test(this.id)" Text='<%# string.Format("{0:N}", Eval("PremioLiquidare"))%>' runat="server" />
и это:
function test(txtID) {
alert('TEST ' + $(this));
alert('TEST ' + $(this).val());
alert('TEST ' + $("#" + txtID).val());
alert('TEST ' + $("#" + txtID).find("[id*='txtRicalcolato']").val());
alert('TEST ' + $("#" + txtID).closest("[id*='txtRicalcolato']").val());
alert('TEST ' + $(this).find("[id*='txtRicalcolato']").val());
alert('TEST ' + $(this).closest("[id*='txtRicalcolato']").val());
}
Но первый печатает объект TEST Object, второй пустой и третий правильное значение, а остальные не определены. Что я делаю неправильно?
Визуализированный HTML:
<table class="mGrid" id="ctl00_MainContent_grid">
<tbody>
(...)
<tr>
(...)
<td>
<input name="ctl00$MainContent$grid$ctl03$txtValore" value="1.693,44" id="ctl00_MainContent_grid_ctl03_txtValore" onchange="test(this.id)" type="text">
</td>
<td>
<input name="ctl00$MainContent$grid$ctl03$txtRicalcolato" value="169,34" id="ctl00_MainContent_grid_ctl03_txtRicalcolato" onchange="test(this.id)" type="text">
</td>
(...)
<td>
<span id="ctl00_MainContent_grid_ctl03_lblDelta">-1.524,10</span>
</td>
(...)
</tr>
(...)
</tbody>
</table>
table
илиdiv
). Это имеет гораздо меньшие накладные расходы и сохраняет весь код в одном месте. - person Gone Coding   schedule 14.11.2014