Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 即使表单返回false,也要提交表单_Javascript_Html_Forms - Fatal编程技术网

Javascript 即使表单返回false,也要提交表单

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

我似乎无法阻止我的表单提交,即使它显示返回的是false。有人能帮我找出错误吗

以下是我的html代码:

<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;
  }
}