我在转发器中有多个文本框,我将在运行时在这些文本框中输入值。我想要在一个label.i中的那些文本框中输入的所有值的总和。我想使用java脚本来做这件事。所以,请你帮助我。
答案 0 :(得分:6)
这是让你入门的一个想法:
<div>
周围放置一个Repeater
,并为其添加一个唯一的id
。document.getElementById()
函数获取对<div>
。getElementsByTagName()
函数查找其中的所有<input>
。因此,如果您的标记看起来像这样:
<div id="coolStuff">
<asp:Repeater ... >
</div>
JavaScript看起来大致如下:
var container = document.getElementById("coolStuff");
var inputs = container.getElementsByTagName("input");
var sum = 0;
for (var i = 0; i < inputs.length; i++) {
sum += inputs[i].value;
}
alert(sum);
现在,此代码不会检查以确保<input>
实际上是type=text
或确认输入的值是数字。这些部分留给读者练习;)
编辑:如果Repeater
输出的每个“行”中有多个文本框,并且您只想对一个“组”框的值求和,则需要稍微改变一下脚本。以下是两种可能的解决方案 - 选择一种:
如果您确切知道每个“行”中有多少<input>
个元素,则可以将客户端脚本中的for
循环更改为仅访问每个第N个元素。例如。仅选择每行中三个字段的最后一个:for (var i = 2; i < inputs.length; i += 3)
更改标记,使class
元素包含<input>
属性,作为总和的一部分。在for
循环中,对inputs[i].className
进行测试,以验证是否要包含特定字段。
答案 1 :(得分:2)
类似的东西,假设您想要对转发器控件中的所有文本框求和。这也只是数字值的总和。
var repeater = document.getElementById('repeater_id');
var inputs = repeater.getElementsByTagName('input');
var sum = 0;
for (var i=0; i < inputs.length; i++) {
if (inputs[i].type === "text" && /^\d+$/.test(inputs[i].value)) {
sum += inputs[i].value;
}
}
如果你正在做很多客户端的事情,为什么不看看用jQuery这样做呢。
答案 2 :(得分:0)
<asp:Repeater ID="rpt" CssClass="rpt">
<itemTemplate>
<asp:TextBox ID="txtValue" />
</itemTemplate>
<footerTemplate>
<asp:Label Id="lblResult" CssClass="result" />
</footerTemplate>
</asp:Repeater>
javascript使用jQuery:
$(document).ready(function(){
$('.rpt input[type=text]').live('onchange', calc);
});
function calc(){
var result = 0;
$('.rpt input[type=text]').each(function(){
// need better input cleaning here...
result += parseInt($(this).val());
});
$('.rpt .result').val(result);
}
HTH。
答案 3 :(得分:0)
获取jQuery。 使用例如CssClass ='totals'将类添加到转发器标记中的文本框中。使用以下jQuery代码来计算值
var total = 0;
$('input.totals').each(function(){
if (!isNan($(this).text())) total += $(this).text()
});
alert('Total is ' + total);