请高手帮忙看看表单提交验证,为啥按了提交按钮后还是会通过呢?

请高手帮忙看看表单提交验证,为啥按了提交按钮后还是会通过呢?

问题描述:

就是验证手机验证码的,如果为空,表单提交是提交不了,但是如果不为空则开始验证AJAX后,就不行了,随便输入个数字就会提交。

<form name="regForm" action="./?act=save" method="post" onsubmit="return checkForm()">
        //验证码输入检查
        var i = document.getElementById('icode');
        var codebad = 1;
        function check_icode() {           

        var tip_phone = document.getElementById('tip_phone');
        if (i.value == "") {
        tip_phone.innerHTML = '请填写验证码';
        return false;
        } else {
        $.ajax({url:"code_back.asp",type:'POST',data:{i:i.value,p:p.value},dataType:'text',success:function(data){
        if(data=='1'){
        tip_phone.innerHTML = '请填写验证码2';
        return false;
        }            
        }})
        }
        }

function checkForm() {
return check_icode() ;
}

改成这样试试

 //验证码输入检查
        var icode = document.getElementById('icode').value;
        var codebad = 1;
        function check_icode() {           
            var tip_phone = document.getElementById('tip_phone');
            if (icode == "" || icode == null || icode.length < 4) {
                    tip_phone.innerHTML = '请填写验证码';
                    return false;
                } else {
                        $.ajax({
                            url:"code_back.asp",
                            type:'POST',
                            data:{i:i.value,p:p.value},
                            dataType:'text',
                            success:function(data){

                            }
                        })

            }
        }

可能是你提交代码的地方有问题,没有根据 retrun false 这个结果进行处理。

$.ajax 是异步的,当你输入数字时,传入到ajax进行请求验证,请求发出此时会直接返回,你可以添加个参数async:false,改为同步请求,直接结果返回再退出该方法。

代码:
图片说明
运行结果
图片说明
1、加上async: false
2、ajax中不能返回东西,用一个变量flag接收,再把结果返回