Javascript 即使表单返回false,也要提交表单
我似乎无法阻止我的表单提交,即使它显示返回的是false。有人能帮我找出错误吗 以下是我的html代码:Javascript 即使表单返回false,也要提交表单,javascript,html,forms,Javascript,Html,Forms,我似乎无法阻止我的表单提交,即使它显示返回的是false。有人能帮我找出错误吗 以下是我的html代码: <form role="form" onsubmit="return login()" action="03_select_survey.html"> <!-- Username --> <div class="form-group"> <label for="user">Username:</label> <inp
<form role="form" onsubmit="return login()" action="03_select_survey.html">
<!-- Username -->
<div class="form-group">
<label for="user">Username:</label>
<input type="text" class="form-control" id="user" placeholder="Enter Username">
</div>
<!-- Password -->
<div class="form-group">
<label for="pwd">Password:</label>
<input type="password" class="form-control" id="pwd" placeholder="Enter password">
</div>
<!-- Submit button -->
<button type="submit" class="btn btn-primary btn-lg">Submit</button>
代码在AJAX调用中到达“return false;”,因为它会用消息提醒我,但当我单击OK时,它会进入下一页而不是停留在当前页上 至少给我们看一下标签代码。但简单的回答是,你并没有停止张贴表单。xmlHttp是异步的,因此当您单击submit按钮时,命令将被触发,但函数“login()”将退出而不返回false。您需要从该函数返回false以停止POST 这是我要做的一个例子
函数登录(){
“严格使用”;
//变数
var用户名,
暗语
xmlhttp,
isFound;
//获取用户名和密码
用户名=document.getElementById(“用户”);
密码=document.getElementById(“pwd”);
//如果用户名或密码为空
如果(username.value==“”| | password.value==“”){
警告(“不正确的用户名或密码”);
返回false;
}否则{
//IE7+、Firefox、Chrome、Opera、Safari的代码
if(window.XMLHttpRequest){
xmlhttp=新的XMLHttpRequest();
}else{//IE6、IE5的代码
xmlhttp=newwindow.ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数(){
if(xmlhttp.readyState==4&&xmlhttp.status==200){
警报(“AJAX响应…”);
isFound=xmlhttp.responseText;
//检查数据库中是否存在登录信息
如果(isFound.value==“true”){
警报('我们很好!使用JavaScript导航到新页面…');
window.location='03_select_survey.html';
返回true;
}否则{
警报('不正常!不允许他们进入!');
返回false;
}
}否则{
警报(“我们没有预料到的AJAX状态更改…”);
return false;//以防我们需要停止表单发布
}
};
}
xmlhttp.open(“GET”、“login.php?user=“+username.value+”&pass=“+password.value,true”);
xmlhttp.send();
return false;//如果我们在上述异步AJAX调用完成之前中断,则此false将阻止表单POST
}
用户名:
密码:
提交
我尝试在打开并发送请求后添加“检查数据库中是否存在登录信息”部分,但不知何故,这甚至不会使警报弹出。我不熟悉stackoverflow,也不熟悉html和js,所以我不确定一切是如何工作的。问题是它仍然在发布表单并进入下一页,还是没有显示警报?您提到的问题是表单正在发布并转到下一页。是的,由于“return false”与alert语句位于同一代码块中,因此我将其用作检查,以查看发生了什么。在我发布的代码中,会弹出“为什么不停止提交?”的警告,但表单仍然会被提交。在取出onreadystatechange函数()中的if/else语句并将其添加到login()函数的底部之后,在打开和发送请求之后,警报根本不会弹出,表单仍在提交中。函数中的代码不会线性执行。xmlHttp调用是异步的。这意味着您的代码进入login函数,执行获取/检查用户名/密码的代码,设置xmlHttp对象,然后执行最后一行--xmlHttp.send(),并退出函数而不返回false,因此您的页面将发布。回调xmlHttp.onreadystatechange是在您离开该函数后调用的,因为它是一个回调,而闭包在函数调用后保留它。尝试将“return false”放在xmlHttp.send()之后。好的,我明白你的意思了。我想我成功了。这就是我发现的:isFound变量值是正确的,但是当函数()退出时,isFound中的值不会被保留(这可能是一件显而易见的事情,但我对此有点陌生,所以我不知道)。因此,我所做的是在函数()中进行if/else检查,并使其返回true或false,然后在xmlhttp.send()之后使用另一个if/else语句,检查xmlhttp.onreadystatechange的值,并在此基础上返回true或false。这似乎起到了作用。
function login() {
"use strict";
// Variables
var username,
password,
xmlhttp,
isFound;
// Get username and password
username = document.getElementById("user");
password = document.getElementById("pwd");
// If username or password is empty
if (username.value === "" || password.value === "") {
window.alert("Incorrect username or password.");
return false;
} else {
// code for IE7+, Firefox, Chrome, Opera, Safari
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else { // code for IE6, IE5
xmlhttp = new window.ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
isFound = xmlhttp.responseText;
// Check if login info exists in database
if (isFound.value === "true") {
return true;
} else {
return false;
}
}
};
}
xmlhttp.open("GET", "login.php?user=" + username.value + "&pass=" + password.value, true);
xmlhttp.send();
if (xmlhttp.onreadystatechange === true) {
return true;
} else {
window.alert("Why won't you stop submitting?");
return false;
}
}