我想在单击按钮时验证至少必须在 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;
}
}
}
这里发生的情况是,当我更新第一行并提交时,它没有给出任何完美的警报,但是当我更新第二行时,它仍然要求我请至少编辑一行。
我不知道这里出了什么问题。
看看 js fiddle对于相同的
最佳答案
目前,验证仅限于检查顶行,原因有两个:
.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;
}
关于javascript - GridView 验证在 JavaScript 中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36355830/