即使js函数返回false,onsubmit也会通过

时间:2013-12-18 15:54:25

标签: javascript onsubmit

我已经阅读了很多考虑这个问题的帖子,并且出于某些原因,这些解决方案都不适用于我。我有几个用于验证的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">

3 个答案:

答案 0 :(得分:0)

使用javascript submit()

提交表单
<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;
}

答案 1 :(得分:0)

您的问题与您的用户名ID /名称一致性有关。使用控制台(F12)调试此类事情。

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

变化:

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

要:

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

答案 2 :(得分:0)

你的代码伙伴中有很多错误的 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;  
 }  

}