表单验证jQuery

时间:2012-01-10 18:18:14

标签: javascript jquery

我有这段代码用于验证表单:

$("form[name='aar_form']").submit(function()
        {
            var values = new Array();
            $(".tipsy").remove();
            show_loading();
            for(var i in fields)
            {
                if(i < 9)
                {
                    values[i] = $("input[name='" + fields[i] + "']").val();
                }
                else if(i < 10)
                {
                    values[i] = $("select[name='" + fields[i] + "']").val();
                }
                else
                {
                    var $i = $("#" + fields[i] + "_div input:checked");
                    if($i.length < 1)
                    {
                        values[i] = "";
                    }
                    else if($i.length == 1)
                    {
                        values[i] = $i.val();
                    }
                    else
                    {
                        values[i] = new Array();
                        $i.each(function()
                        {
                            values[i].push($(this).val());
                        });
                    }
                }
            }
            window.no_errors = false;
            ajax_request({act: "aar_validate", values: values}, function(response)
            {
                response = eval("(" + response + ")");
                window.no_errors = response.errors ===  true ? false : true;
                if(response.errors === true)
                {
                    for(var i in response.error_fields)
                    {
                        $(response.error_selector[i] + "[name='" + response.error_fields[i] + "']").attr("title", response.error_msgs[i]).tipsy({trigger: "manual", gravity: response.error_gravity[i]}).tipsy("show");
                    }
                    hide_loading();
                    $("html, body").animate({scrollTop: $(response.error_selector[0] + "[name='" + response.error_fields[0] + "']").offset().top - 80}, "slow");
                }
            });
            console.log(window.no_errors);
            setTimeout("console.log('k: ' + window.no_errors)", 100);
            return false;
        });

后端的PHP脚本执行所有验证。发生的问题是window.no_errors变量更新得太晚。现在,我对控制台的第一个日志给出了错误(因为它默认情况下就是这样),但是第二个用超时100毫秒设置的日志返回true,应该如此。如果我写它喜欢这个:

setTimeout("return window.no_errors", 100);

无论no_errors变量是什么,表单都会提交。

任何提示?

1 个答案:

答案 0 :(得分:0)

如果您在验证期间不想在页面上执行任何其他操作,请同步调用验证页面而不是默认的异步调用