2010-04-22 60 views
1

我在中繼器中有多個文本框,我將在運行時在那些文本框中輸入值。我想在一個標籤中輸入在這些文本框中輸入的所有值的總和。我想用java腳本來做這件事。所以你可以幫我。如何使用JavaScript迭代通過ASP .NET文本框並計算值?

+3

這不是要求完成代碼的地方。嘗試編寫代碼,然後在遇到困難時尋求幫助。 – driis 2010-04-22 18:32:27

+0

有人請重命名。也許是retag。而一些更多的信息也不會傷害。 – Foxfire 2010-04-22 18:32:57

+0

在[JQuery論壇](http://forum.jquery.com/topic/textboxes-in-asp-repeater-with-total-row)上可能會有幫助。 – Glennular 2010-04-22 18:32:48

回答

6

這裏有一個想法,讓你開始:

  1. 將一個<div>Repeater周圍,給它一個獨特的id
  2. 使用JavaScript中的document.getElementById()函數獲取對該<div>的引用。
  3. 使用DOM元素中的getElementsByTagName()函數查找所有內部的<input>
  4. 循環它們,將它們的值(分解爲整數)一起添加。

所以,如果您的標記看起來是這樣的:

<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> s爲實際上是type=text或確認輸入的值是數字。那些部分被留下作爲練習讀者;)


編輯:如果您有多個文本框由Repeater輸出的每一「行」,你只需要值相加爲一個「組」的盒子,你需要稍微改變腳本。這裏有兩個可能的解決方案 - 選擇一個:

  1. 如果你知道你到底有多少<input>元素在每個「行」,你可以在客戶端腳本改變for循環,不僅可以訪問每第N個元素。例如。只有在每行選擇的最後三個字段:for (var i = 2; i < inputs.length; i += 3)

  2. 更改您的標記,包括在<input>元素class屬性是總和的一部分。在for循環中,對inputs[i].className進行測試以驗證是否包含特定字段。

+0

你好,但我有3個不同的coulmn.if我做這個邏輯,然後 它將做所有文本boxes.for的總和,因爲我想txext框由它的唯一id.but當我做container.getElementByID。它不被支持。 它只支持container.getElementTagName.i想要3不同的總和爲3 difefrent coulmn.and如果我做簡單document.getelementID()它也不工作becoz在中繼器他們產生不同的id爲所有文本boxes.is有任何方式獲得那個不同的id在循環中。 – 2010-04-23 07:01:00

+0

'container.getElementById()'(notice lower case d)* is * supported,but does not help you here。 「」上'id'屬性的值由ASP.NET決定,它在整個頁面中都是唯一的。 – 2010-04-23 07:54:45

+0

@Nikunj:我已經更新了我的答案,提供了一些關於如何解決評論中提出的額外要求的想法。 – 2010-04-23 08:03:29

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。

+0

+1因爲偉大的思想家都一樣! :-) – 2010-04-22 18:42:16

+0

你好,但我有3個不同的coulmn.if我做這個邏輯,然後它會做所有文本boxes.for的總和,因爲我想txext框由它的唯一id.but當我做container.getElementByID.it不是支持的。它只支持container.getElementTagName.i想要3不同的總和爲3 difefrent coulmn.and如果我做簡單document.getelementID()它也不工作becoz在中繼器他們產生不同的id爲所有文本boxes.is有任何方式得到不同的編號在循環 – 2010-04-23 07:01:53

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。

0

獲取jQuery。 使用例如CssClass ='totals'將類添加到中繼器標記中的文本框中。使用以下jQuery代碼來合計值

var total = 0; 
$('input.totals').each(function(){ 

if (!isNan($(this).text())) total += $(this).text() 
}); 

alert('Total is ' + total);