GridView验证在JavaScript中无法正常工作

时间:2016-04-01 12:00:54

标签: javascript jquery gridview

我想在点击按钮时验证必须在JavaScript中编辑和更新至少一行。

所以我编写了以下代码进行验证

function checkGridValidate() {
        var StrPriError = "";

        var grdCount = GrdProspective1.Rows.length;

        for (var i = 0; i < grdCount; i++) {

            if (GrdProspective1.Rows[0].Cells[5].Value == "" || GrdProspective1.Rows[0].Cells[7].Value == "") {
                StrPriError += "Kindly edit atleast one row \n";
            }
            if (StrPriError != "") {
                alert(StrPriError);
                return false;
            }
            else {
                return true;
            }
        }
    }

这里发生的事情是,当我更新第一行并提交时,它没有给出任何完美的提示,但是当我更新第二行时它还是要求我请至少编辑一行< / em>的

我不知道这里出了什么问题。

查看相同

js fiddle

1 个答案:

答案 0 :(得分:1)

目前,验证仅限于检查顶行,原因有两个:

  • .Rows[0]将始终检查顶行,尽管for循环。

    这应该使用i,因为它在集合中递增:

    if (GrdProspective1.Rows[i].Cells[5].Value == "" || 
    
  • 在任何一种情况下,if..else的最后return都会中断循环。对于循环,return语句对break语句具有类似的效果。

    所以,除非你想让循环中断,否则它们应该被移出循环:

    for (var i = 0; i < grdCount; i++) {
        if (...) {
            // ...
        }
    }
    
    if (StrPriError != "") {
        alert(StrPriError);
        return false;
    }
    else {
        return true;
    }
    

虽然,修复这些问题应该会发现一个不同的问题 - 该功能正在检查每一行是否已被编辑而不是一行或多于一行。

例如,如果有5行,并且您在其中2行中填写了两个字段,则其余3行将匹配该条件并附加错误消息。

反转条件,因此您正在搜索已填写的行并记住您是否有,应解决此问题。

function checkGridValidate() {
    // assume invalid until found otherwise
    var anyEdited = false;

    var grdCount = GrdProspective1.Rows.length;
    for (var i = 0; i < grdCount; i++) {
        var cells = GrdProspective1.Rows[i].Cells;

        // verify that both fields were given a value
        if (cells[5].Value !== "" && cells[7].Value !== "") {

            anyEdited = true; // remember that you've found an edited row
            break;            // and, no need to keep looking for more
        }
    }

    // alert only if no rows were filled out
    if (!anyEdited) {
        alert("Kindly edit at least one row.");
    }

    return anyEdited;
}