我有6个asp网格视图,需要对每个网格视图进行相同的计算。我可以对该函数进行6次硬编码,但寻找更有效的方法。
我在做什么:每行有3个输入框,每个gv我需要计算平均值并将其发送到最后一列的lbl。
以下是我为第一个gv做的事情:
function calculate() {
//********************
//Development Grid
//********************
//Find the number of rows in the grid
var rowCount = $('#devGV tr').length;
//Iterate through each row looking for the input boxes
for (var i = 0; i < rowCount; i++) {
//convert the total variable to an int
var total = 0;
parseInt(total);
//This variable is for tracking the number of actual fields that are populated.
//Not all the text fields will always be needed, so the average will not always be calculated by dividing by 3
var averNum = 0;
//Iterate through each text box
$("#devGV tr:eq(" + i + ")").find(":input[type=text]").each(function () {
//Convert the value to an int
var thisValue = parseInt($(this).val());
//In the value is blank, change it to 0 for calculation purposes
if (isNaN(thisValue) || thisValue == 0) {
thisValue = 0;
}
else {
averNum += 1;
}
total = (total + thisValue);
});
//Populate the totals label for each row
total = total / averNum;
total = total.toFixed(2);
//In the value is blank, change it to 0 for calculation purposes
if (isNaN(total)) {
total = 0;
}
$("#devGV tr:eq(" + i + ")").find("[class$='RowTotals']").text(total);
}
}
上述功能正在被&lt; brl&#39;在每个文本字段上。有没有办法让这个块可以用于所有的网格视图?我确定这只是更新选择器的问题,但我对如何做到这一点感到茫然。
答案 0 :(得分:1)
最简单的可能是传递一个jquery对象来计算函数:
function calculate(gv) {
然后使用.find()
代替您拥有ID的位置,例如“查找网格中的行数”这样的内容:
var rowCount = gv.find('tr').length;
我之所以说将jQuery对象传递给函数更容易(而不是它的字符串ID,比如说)是因为它可以让你做这样的事情:
$('.some-gridview-css-class').each(function() {
calculate($(this));
});
显然,用任何选择器替换该选择器将为您识别6个网格视图。
编辑:哦,我没有仔细阅读。你想在一个文本框的onblur上做。这意味着你想要这样的东西:$(document).ready(function() {
$(body).on('blur', 'input-fields-selector', function() {
calculate($(this).closest('gridview-selector'));
});
});
您必须使用选择器替换input-fields-selector和gridview-selector以查找相应的字段(这取决于您的HTML)。