在多个网格视图/表格上使用相同的功能

时间:2015-02-11 11:41:37

标签: javascript jquery asp.net

我有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;在每个文本字段上。有没有办法让这个块可以用于所有的网格视图?我确定这只是更新选择器的问题,但我对如何做到这一点感到茫然。

1 个答案:

答案 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)。