试图检索变量以检查表单是否有效

时间:2012-07-04 10:58:34

标签: javascript jquery

我正在尝试从JavaScript表单中检索变量,以确定表单之前是否已经过验证。

因此,当用户点击“提交”按钮时,将检查此项。我已经设置好了,所以当点击这个按钮时它可以运行一个函数。

验证码:

$(document).ready(function(){
    $('#email').keyup(function() {
        var email = $('#email').val();
        var minChars = 5;
        var characters_error = 'Not enough characters';
        $('#email_status').text("Checking..");  
        if (email != '') {
            if($('#email').val().length <= minChars)
            {
                //if it's bellow the minimum show characters_error text
                $('#email_status').text(characters_error);
            }
            else if ($('#email').val().length > minChars)
            {
                $.post('validation/refer_validation.php', {email: email}, function(data){
                    $('#email_status').text(data);
                }); 
            } else
            {
                $('#email_status').text('');
            }
         }
    });
});

按钮代码:

$(document).ready(function(){
    $("#submit").click(function () {
        if (validated != true)
        {
            // Tell the user that there is an error in the form.
        }
    });
});

注意我是如何添加名为'validated'的变量,应该在某处设置但这是我感到困惑的地方。我如何更新变量并将其返回到按钮?因为验证代码包含在HTML表单中,但是如果我创建了一个变量,它可能总是将自身更新为默认值,因为该函数是在key up上调用的。

希望这一切都有道理。

4 个答案:

答案 0 :(得分:1)

不是使用提交按钮调用验证函数,而是在表单的onsubmit中调用它。如果您返回true,它将继续并提交表单,如果您返回false,它将取消表单提交。

<form  onsubmit="return validate();">

在提交实际发生之前就会调用Onsubmit。

答案 1 :(得分:0)

设置一个全局变量,即在所有函数之外,设置

var validated = false;

然后相应地设置验证,并且应该在提交中阅读。

答案 2 :(得分:0)

使用变量 validate 作为全局变量, 每次成功验证都会使验证为真

然后单击提交按钮

时工作正常

答案 3 :(得分:0)

不是抛出外部变量,而是更好地记录表单已被验证为表单本身的数据属性。

此外,点击按钮进行验证会忽略表单可能通过回车键提交的事实,因此请在表单的提交事件上进行验证。

$(function() {
    $('#some_form').on('submit', function() {

        //validated before? forget it
        if ($(this).data('validated')) { alert('already validated'); return false; }

        //else, if first time, log that we're doing it
        $(this).data('validated', 'true');

        //do validation...
   });
});