防止提交虚假返回Javascript

时间:2018-06-13 16:13:29

标签: javascript validation onsubmit

似乎我在确切了解表单提交的工作方式时遇到了问题......

这是我提交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参数做什么,但没有任何东西可以解释为什么它拒绝按预期运行。

1 个答案:

答案 0 :(得分:0)

问题是你最终没有对验证结果做任何事情。

当事件触发时,您的函数validateForm将被调用,并且它可能正常工作,但其返回值无处可去。

如果没有看到整个页面,就无法说明你应该做出什么改变,但希望这足以说明你需要做什么,以便你能解决它。