防止表单提交

时间:2015-03-30 09:19:10

标签: javascript php jquery forms validation

我想将js var设置为true,但仅在登录数据正确时,如果表单有效(字段为空......)我该怎么办?我正在使用jQuery验证插件,我修改了submitHandler,这样表单只提交,如果flag为true。

var flag = false;

$('#login-form').validate(
{
    rules:
    {
        User: "required",
        Password: "required"
    },
    messages:
    {
        User: "Please enter a Username!<br />",
        Password: "Please enter a Password!",
    },
    submitHandler: function(form)
    {
        if(flag)
        {
            var message = document.createElement("div");
            message.id = "info";
            message.style.width = "250px";
            message.style.height = "25px";
            message.style.color = "green";
            message.innerHTML = '<p style="text-align: center;">Your Login Data is correct!.</p>';

            $("#login-form").after(message);
            form.submit();
        }
    },
});

这里是php部分,我想将标志设置为true,如果登录数据是正确的,否则它应保持原样但我现在如何设置标志?

if(!empty($result))
{        
    **Here i want to set the Flag!!
    $flag = true; ??****

    $_SESSION["loggedin"] = $user;
    header ("Location: index.php?site=backend"); 
    exit;
}
else
{
    echo '<p style="text-align: center; color: red">The username or password is wrong!</p>';
    header ("Refresh:2; url=index.php?site=backend-login"); 
    exit;
}

还是有更好的方法吗?我只是不想总是重新加载表单,因为它是一个自我提交的表单。之后我还想展示一条信息。 那么,我如何设置或更改var test的现有值?

2 个答案:

答案 0 :(得分:2)

只是做:

var flag = $('#login-form').valid();

..您将获得flag中的布尔值。

<小时/> 阅读:.valid() | jQuery Validation Plugin
PS。最好在jQuery选择器中使用HTML元素,以便它更快地运行。

form#login-form 

<小时/> 编辑:

工作代码段:

var flag = false;

$('#login-form').validate(
  {
    rules:
    {
      User: "required",
      Password: "required"
    },
    messages:
    {
      User: "Please enter a Username!<br />",
      Password: "Please enter a Password!",
    },
    submitHandler: function(form)
    {
      var flag = $('#login-form').valid();
      if(flag)
      {
        var message = document.createElement("div");
        message.id = "info";
        message.style.width = "250px";
        message.style.height = "25px";
        message.style.color = "green";
        message.innerHTML = '<p style="text-align: center;">Your Login Data is correct!.</p>';

        $("#login-form").after(message);
        form.submit();
      }
    },
  });
input, label{
  display: block;
  margin: 10px;
  font-family: Arial;
}

label.error{
  color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.13.1/jquery.validate.min.js"></script>

<form id="login-form">
  <input type="text" id="User" name="User" />
  <input type="password" id="Password" name="Password" />
  <input type="submit" value="Login"/>
</form>

编辑2:

在回应评论时,我强烈建议您使用AJAX。使用AJAX,首先检查用户是否存在,然后将适当的值设置为flag并将其传递给Javascript,然后继续使用。

阅读:jQuery.ajax() | jQuery API Documentation

这是将数据从JS传递到PHP的最合适方式,反之亦然。

答案 1 :(得分:0)

在你的PHP文件中,你需要输出一些像这样的

的javascript代码
// PHP file where your checks are making flag = true
echo '<script type="text/javascript"> var flag = true; </script>';

// PHP file where your checks are making flag = false
echo '<script type="text/javascript"> var flag = false; </script>';

然后不要使用您的javascript为您的旗帜重新分配价值。从您的javascript中删除var flag = false;

要小心,PHP必须在您的js代码之前回显(因此您的标志将首先获取值,然后您的js将使用它)。