【问题标题】:onsubmit passes even when js function returns false即使 js 函数返回 false,onsubmit 也会通过
【发布时间】:2013-12-18 15:54:25
【问题描述】:

我已经阅读了很多考虑这个问题的帖子,但由于某种原因,没有一个解决方案适合我。我有几个用于验证的 js 函数,它们在指定给表单中的 onSubmit 标记的主要函数中调用。这是js代码:

<script type="text/javascript">
function validacijaForme() {

var username = document.getElementById('usname');
var email = document.getElementById('email');
var pass1 = document.getElementById('pass1');
var pass2 = document.getElementById('pass2');


 if(validacijaUsername(username) && validacijaEmail(email) && validacijaSifri(pass1,pass2))
{
  alert('success');
  return true;
}

return false;
}

</script>

<script type="text/javascript">
function validacijaSifri(fieldId1, fieldId2)
{
var two = document.getElementById(fieldId1).value;
var three = document.getElementById(fieldId2).value;
if(two == three) { return true; }
alert("Warning!! passcodes must match!!!");
return false;
}
</script>

<script type="text/javascript">
function validacijaUsername(usname)
{
var letters = /^[A-Za-z]+$/;  
if(letters.test(usname.value))  
{  
  return true;  
}  
else  
{  
  alert('Username must have alphabet characters only');  
  document.getElementById('usrname').focus();  
  return false;  
} 
}
</script>  

<script type="text/javascript">
function validacijaEmail(email)
{
var mailformat = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;  
if(mailformat.test(email))  
{  
  return true;  
}  
else  
{  
  alert("You have entered an invalid email address!");  
  document.getElementById(email).focus(); 
  return false;  
 }  

} 

这里是html表单代码

<form class="form-signin" onSubmit="return validacijaForme();" name="registerForm" method = "POST" action="test.php" enctype="multipart/form-data">
<h2 class="form-signin-heading">Registracija</h2>
<input type="text" class="form-control" placeholder="Username" name="usrname" id="usname" autofocus>
<input type="text" class="form-control" placeholder="E-mail" name="email" id="email">
<input  type="password" class="form-control" placeholder="Password" name="pass" id="pass1">
<input  type="password" class="form-control" placeholder="Confirm password" id="pass2">
<button class="btn btn-lg btn-primary btn-block" name="dugme" type="submit">Register</button>

问题在于所有警报都在工作,这意味着这些函数确实验证了字段,并且应该返回 false,但是 onSubmit 标记似乎不接受来自函数的值。 只有当我输入以下内容时,表单才会提交并且不会传递给 test.php:

 <form class="form-signin" onSubmit="return false" name="registerForm"  method = "POST" action="test.php" enctype="multipart/form-data">

【问题讨论】:

  • 你能给我们链接吗?
  • 抱歉,没看懂,链接什么?
  • 你的函数有很多错误

标签: javascript onsubmit


【解决方案1】:

使用javascriptsubmit()提交表单

<form id="myform" class="form-signin" onSubmit="validacijaForme();" name="registerForm" 
method = "POST" action="test.php" enctype="multipart/form-data">

在你的函数中:

function validacijaForme() {
var username = document.getElementById('usname');
var email = document.getElementById('email');
var pass1 = document.getElementById('pass1');
var pass2 = document.getElementById('pass2');

if(validacijaUsername(username) && validacijaEmail(email) && validacijaSifri(pass1,pass2))
{
alert('success');
document.getElementById("myform").submit();
return false;
}
return false;
}

【讨论】:

  • 你也把id放在form标签里?
【解决方案2】:

您的问题与您的用户名 ID/名称一致性有关。使用控制台(F12)调试这种东西。

<input type="text" class="form-control" placeholder="Username" name="usRname" id="usname" autofocus>

变化:

    document.getElementById('usrname').focus();

收件人:

    document.getElementById('usname').focus();

【讨论】:

  • 非常感谢,我根本没有注意到,这是问题的一部分,另一部分是我正在调用 document.getElementById('usname').focus();并且没有必要这样做,因为我已将元素传递给函数,它一定导致了一些异常,阻止了行 return false 执行..
  • 是的,打开控制台后很容易找到。立即将此概念添加到您的调试工具中!
  • 我不知道这个答案是如何被接受的,即使在所有功能中都有错误
【解决方案3】:

你的代码伙伴有很多错误 | WORKING DEMO

function validacijaForme() {

var username = document.getElementById('usname');
var email = document.getElementById('email');
var pass1 = document.getElementById('pass1');
var pass2 = document.getElementById('pass2');


 if(validacijaUsername(username) && validacijaEmail(email) && validacijaSifri(pass1,pass2))
{
  alert('success');
  return true;
}

return false;
}

function validacijaSifri(fieldId1, fieldId2)
{
var two = fieldId1.value;
var three = fieldId2.value;
if(two == three) { return true; }
alert("Warning!! passcodes must match!!!");
return false;
}

function validacijaUsername(usname)
{
    var letters = /^[A-Za-z]+$/;  

    if(letters.test(usname.value))  
    {  
      return true;  
    }  
    else  
    {  
      alert('Username must have alphabet characters only');  
      document.getElementById('usname').focus();  
      return false;  
    } 
}

function validacijaEmail(email)
{
var mailformat = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;  
if(mailformat.test(email.value))  
{  
  return true;  
}  
else  
{  
  alert("You have entered an invalid email address!");  
  document.getElementById('email').focus(); 
  return false;  
 }  

} 

【讨论】:

  • 注意,我一直在复制一些代码,这显然是个坏主意,我现在已经更正了,谢谢..
猜你喜欢
  • 2018-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-22
  • 1970-01-01
  • 2012-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多