【发布时间】:2022-01-09 08:12:01
【问题描述】:
我正在尝试验证具有相同名称的多个字段。这是我正在使用的视觉表示:
如果我不点击“请求另一个样品”按钮,我的验证当前有效,该按钮会生成另一组“制造商”、“SKU”等。如果我点击“请求另一个样品”,那就是表单绕过的地方验证并提交。
“制造商”字段 HTML 如下所示:
<tr class="product-sample-field">
<td width="25"></td>
<td align="left" class="formLabel"><font color="red">*</font><label id="manufacturerLabel"><%=eclSystem.translate(silver.getLanguage(), "Manufacturer")%> </label></td>
<td>
<input class="inputFieldBody" type="text" name="manufacturer" id="manufacturer" placeholder="Fishman" size="30" value="<%=manufacturer%>">
</td>
</tr>
这是验证 JS 的样子:
<script type="text/javascript">
var submitcount=0;
function checkForm(form) {
var ok = true, msg = "", tempmsg;
resetLabels();
if ( (tempmsg = checkEmail(form)) != "") {
document.getElementById('emailLabel').style.color = "red";
document.getElementById('confirmEmailLabel').style.color = "red";
form.email.focus();
form.confirmEmail.focus();
msg += tempmsg;
ok = false;
}
// pre-format the phone number
form.phone.value = phoneFormat(form.phone.value);
result = phoneRXP.exec(form.phone.value);
// phone #'s may contain ext number
if (!result) {
document.getElementById('phoneLabel').style.color = "red";
if (form.phone.value)
msg += "\r\n<%=eclSystem.translateJS(silver.getLanguage(), "Please enter a valid telephone number")%>";
form.phone.focus();
ok = false;
}
if (!form.firstName.value) {
document.getElementById('nameLabel').style.color = "red";
form.firstName.focus();
ok = false;
}
if (!form.lastName.value) {
document.getElementById('nameLabel').style.color = "red";
form.lastName.focus();
ok = false;
}
if (!form.company.value) {
document.getElementById('companyLabel').style.color = "red";
form.company.focus();
ok = false;
}
if (!form.address.value) {
document.getElementById('addressLabel').style.color = "red";
form.address.focus();
ok = false;
}
if (!form.city.value) {
document.getElementById('cityStateZipLabel').style.color = "red";
form.city.focus();
ok = false;
}
if (!form.state.value) {
document.getElementById('cityStateZipLabel').style.color = "red";
form.state.focus();
ok = false;
}
if (!form.zip.value) {
document.getElementById('cityStateZipLabel').style.color = "red";
form.zip.focus();
ok = false;
}
if (!form.manufacturer.value) {
document.getElementById('manufacturerLabel').style.color = "red";
form.manufacturer.focus();
ok = false;
}
if (!form.sku.value) {
document.getElementById('skuLabel').style.color = "red";
form.sku.focus();
ok = false;
}
if (!form.description.value) {
document.getElementById('descriptionLabel').style.color = "red";
form.description.focus();
ok = false;
}
if (!form.size.value) {
document.getElementById('sizeLabel').style.color = "red";
form.size.focus();
ok = false;
}
if (!form.quantity.value) {
document.getElementById('quantityLabel').style.color = "red";
form.quantity.focus();
ok = false;
}
if (!ok) {
// error message
var finalmsg = "<%=eclSystem.translateJS(silver.getLanguage(), "Please correct the fields marked in red.")%>\r\n";
if (msg) finalmsg += msg;
alert(finalmsg);
return false;
}
if (submitcount==0) {
submitcount++;
return true;
} else {
alert('<%=eclSystem.translateJS(silver.getLanguage(), "This form has already been submitted. Thanks!")%>');
return false;
}
}
function resetLabels() {
document.getElementById('nameLabel').style.color = "#000000";
document.getElementById('companyLabel').style.color = "#000000";
document.getElementById('addressLabel').style.color = "#000000";
document.getElementById('cityStateZipLabel').style.color = "#000000";
document.getElementById('phoneLabel').style.color = "#000000";
document.getElementById('emailLabel').style.color = "#000000";
document.getElementById('confirmEmailLabel').style.color = "#000000";
document.getElementById('manufacturerLabel').style.color = "#000000";
document.getElementById('skuLabel').style.color = "#000000";
document.getElementById('descriptionLabel').style.color = "#000000";
document.getElementById('sizeLabel').style.color = "#000000";
document.getElementById('quantityLabel').style.color = "#000000";
}
function checkEmail(form) {
var msg = "";
var email = document.getElementById('email');
var confirmEmail = document.getElementById('confirmEmail');
if (form.email.value == "" || form.confirmEmail.value == "")
msg = " "; // will flag error w/o msg
else if (email.value != confirmEmail.value)
msg = "\r\n<%=eclSystem.translateJS(silver.getLanguage(), "Please confirm email addresses match.")%>";
else if (!emailRXP.exec(form.email.value) || !emailRXP.exec(form.confirmEmail.value))
msg = "\r\n<%=eclSystem.translateJS(silver.getLanguage(), "Email address should use the following format: john@mycompany.com")%>";
return msg;
}
</script>
任何帮助将不胜感激!如果您还需要更多信息,请告诉我。
【问题讨论】:
-
多个元素不能有相同的id。如果要复制,则必须使用名称字段并遍历元素集合。
-
此外,多个表单字段不能具有相同的名称,除非 1)您将使用 javascript 循环它们并按 DOM 层次结构组装表单数据或 2)您使用数组括号 [] 来表示元素将作为数组进入后端,如
name="manufacturer[]" -
你能包括你所有的验证码吗?根据我的经验,如果有未处理的错误,它无论如何都会提交。
-
@user1599011 添加了所有验证码。抱歉格式化...
-
checkForm()是从哪里调用的?控制台有错误吗?
标签: javascript html validation input field