即使使用了preventDefault,表单仍然可以提交
Form still submits even with preventDefault
我不知道这里出了什么问题。preventDefault应该停止表单提交,但它仍然继续。我有一个ajax调用,它在其中验证用户是否有效。如果没有,请阻止提交。否则,继续登录和主页。
表单
<form id="signIn" method="post" action="processForms.php">
<table cellspacing="10">
<tr id="errorSignIn" hidden="hidden">
<td class="centerItem errorMessage" colspan="3">
Incorrect Username and/or Password
</td>
</tr>
<tr>
<td><input type="text" id="username" name="username" autocomplete="off" autofocus required placeholder="Username..."></td>
<td><input type="password" id="password" name="password" autocomplete="off" required placeholder="Password..."></td>
<td><input type="submit" name="processButton" class="signIn" value="Sign-in" ></td>
</tr>
</table>
</form>
Javascript
$('#signIn').submit ( function (e) {
var username = $('#username').val();
var password = $('#password').val();
var dataString = "username=" + username + "&password=" + password;
$.ajax( {
type: "POST",
url: "ajaxCheck.php",
data: dataString,
cache: false,
success: function (result) {
if (!result) {
$('#errorSignIn').removeAttr('hidden');
e.preventDefault();
return false;
}
}
});
});
ajaxCheck.php
<?php
$username = $_POST['username'];
$password = $_POST['password'];
$password = md5($password);
$dbConnection = mysqli_connect('localhost','root','','onboard');
$query = "SELECT * FROM account WHERE username='$username' AND password='$password'";
$result = mysqli_query($dbConnection,$query);
$count = mysqli_num_rows($result);
if ($count == 1) { echo true; }
else { echo false; }
因为您将prevent默认值放在ajax成功函数中,该函数是异步的。所以这就是为什么它仍然在提交。您必须在调用ajax之前阻止它,而不是在ajax完成之后。
$('#signIn').submit ( function (e) {
e.preventDefault(); // put preventDefault here not inside the ajax success function
var username = $('#username').val();
var password = $('#password').val();
var dataString = "username=" + username + "&password=" + password;
$.ajax( {
type: "POST",
url: "ajaxCheck.php",
data: dataString,
cache: false,
success: function (result) {
if (!result) {
$('#errorSignIn').removeAttr('hidden');
return false;
}
}
});
});
在这里回答你的以下问题是你可以做的事情。
var isFormChecked = false; // this variable will deremine if the ajax have finished what you wanted to do
$('#signIn').submit ( function (e) {
// if ajax set this to true, it will not go here when it triggers.
if(!isFormChecked){
e.preventDefault(); // put preventDefault here not inside the ajax success function
var username = $('#username').val();
var password = $('#password').val();
var dataString = "username=" + username + "&password=" + password;
$.ajax( {
type: "POST",
url: "ajaxCheck.php",
data: dataString,
cache: false,
success: function (result) {
// if result is set to true
isFormChecked = result;
// then trigger the submit of the form
$('#signIn').trigger('submit');
}
});
} else {
// form is submitted
isFormChecked = true;
}
});
您可以在html中将按钮类型从submit更改为button。
然后点击验证,然后在jquery的帮助下提交表单。
以下是它将如何完成您的工作:
<form id="signIn" method="post" action="processForms.php" >
<table cellspacing="10">
<tr id="errorSignIn" hidden="hidden">
<td class="centerItem errorMessage" colspan="3">
Incorrect Username and/or Password
</td>
</tr>
<tr>
<td><input type="text" id="username" name="username" autocomplete="off" autofocus required placeholder="Username..."></td>
<td><input type="password" id="password" name="password" autocomplete="off" required placeholder="Password..."></td>
<td><input type="button" name="processButton" class="signIn" value="Sign-in" ></td>
</tr>
</table>
</form>
$('#processButton').click ( function (e) {
var username = $('#username').val();
var password = $('#password').val();
var dataString = "username=" + username + "&password=" + password;
$.ajax( {
type: "POST",
url: "ajaxCheck.php",
data: dataString,
cache: false,
success: function (result) {
if (!result) {
$('#errorSignIn').removeAttr('hidden');
return false;
}
else { $("#signIn").submit(); }
}
});
});
相关文章:
- Javascript生成的表单未提交
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- HTML表单提交时未执行外部函数
- 在POST中将html表作为csv提交
- 我应该使用Ng提交还是点击表格
- 我想使用模态通过php文件发送邮件,并且我希望在提交关闭后关闭pop
- 提交后保留下拉选择的值
- 键入最后一位数字后自动提交
- 阻止表单元素提交
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- Jquery提交表单而不刷新
- 将图像上传ajax与表单提交ajax相结合
- Jquery表单验证插件-如果选中复选框,如何在提交时执行某些操作
- 自定义表单验证和提交
- 带有验证和隐藏字段值的提交按钮
- 如何在 API 调用后和 if 语句中启用提交按钮
- Jquery函数在错误的时间提交
- Javascript无法处理表单提交
- 提交按钮,该按钮位于使用 Excel VBA 的 Javascript 中
- 表单不会通过ajax提交