我想在点击按钮时验证必须在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答案 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;
}