似乎我在确切了解表单提交的工作方式时遇到了问题......
这是我提交from:
的事件监听器 function createEventListeners() {
var orderForm = document.getElementsByTagName("form")[0];
if (orderForm.addEventListener) {
orderForm.addEventListener("submit", validateForm, false);
}//end if
else if (orderForm.attachEvent) {
orderForm.attachEvent("onsubmit", validateForm);
}//end else
}//end function createEventListeners()
以下是验证表单的代码:
function validateForm(evt){
var valid = true;
if (testLength(document.expReport.lname) == false){
valid = false;
}
if (testLength(document.expReport.fname) == false){
valid = false;
}
if (testLength(document.expReport.summary) == false){
valid = false;
}
if (testLength(document.expReport.init) == false){
valid = false;
}
//Call the testPattern() function with the department field for the field parameter.
if (testPattern(document.expReport.deptID, /DEPT\d\d\d\d\d/) == false){
valid = false;
}
//Call the testPattern() function with the account field object for the field parameter.
if (testPattern(document.expReport.accID, /ACT\d\d\d\d\d\d/) == false){
valid = false;
}
//Call the testPattern() function with the project field for the field parameter.
if (testPattern(document.expReport.projID, /PROJ-..-\d\d\d\d/) == false){
valid = false;
}
//Call the testPattern() function for the ssn field
if ((testPattern(document.expReport.ssn, /\d\d\d\d\d\d\d\d\d/) || testPattern(document.expReport.ssn, /\d\d\d-\d\d-\d\d\d\d/)) == false){
valid = false
}
if (testDates() == false){
valid = false;
}
if (valid == false){
window.alert("Please fill out all required fields in the proper format.")
}
return valid;
}//end function validateForm(evt)
我的问题是,即使validate函数返回false值,表单提交仍然会发生。
我已经研究过如何防止这种情况发生,但似乎大多数人只是使用.preventDefaults()方法来解决这个问题。我的问题是,我正在使用的表单包含可选的文本字段,因此如果用户选择不填写它们,他仍然会收到错误的回复。
我是如何设置听众提交的?
我也试图查找可以用evt参数做什么,但没有任何东西可以解释为什么它拒绝按预期运行。
答案 0 :(得分:0)
问题是你最终没有对验证结果做任何事情。
当事件触发时,您的函数validateForm
将被调用,并且它可能正常工作,但其返回值无处可去。
如果没有看到整个页面,就无法说明你应该做出什么改变,但希望这足以说明你需要做什么,以便你能解决它。