onsubmit проходит, даже если функция js возвращает false

Я прочитал много сообщений, посвященных этой проблеме, и по какой-то причине ни одно из решений не работает для меня. У меня есть несколько 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;  
 }  

} 

and here is the html form code

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

The problem is that all the alerts are working, meaning that those functions do validate the fields, and should return false, but the onSubmit tag doesn't seem to accept that value from the function. The form doesn't submit and doesn't pass to test.php only if I type this:

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

person Matija    schedule 18.12.2013    source источник
comment
Можете ли вы дать нам ссылку?   -  person Voonic    schedule 18.12.2013
comment
Извините, не понял, ссылка на что?   -  person Matija    schedule 18.12.2013
comment
У вас много ошибок в ваших функциях   -  person Voonic    schedule 18.12.2013


Ответы (3)


отправить форму с 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;
}
person Michel    schedule 18.12.2013
comment
вы также поместили идентификатор в тег формы? - person Michel; 18.12.2013

Ваша проблема связана с согласованностью идентификатора/имени вашего имени пользователя. Используйте консоль (F12) для отладки подобных вещей.

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

Изменять:

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

To:

    document.getElementById('usname').focus();
person Kaizen Programmer    schedule 18.12.2013
comment
большое спасибо, я вообще этого не заметил, это было частью проблемы, другая часть заключалась в том, что я вызывал document.getElementById('usname').focus(); и в этом не было необходимости, поскольку я передал элемент функции, это должно было вызвать какое-то исключение, которое предотвратило выполнение строки return false.. - person Matija; 18.12.2013
comment
Да, его было довольно легко найти, как только я открыл консоль. Добавьте эту концепцию в свой набор инструментов для отладки уже сегодня! - person Kaizen Programmer; 18.12.2013
comment
Я не знаю, как этот ответ был принят, даже если во всех функциях были ошибки. - person Voonic; 18.12.2013

В вашем коде много ошибок, приятель | РАБОЧАЯ ДЕМО

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

} 
person Voonic    schedule 18.12.2013
comment
отметил, что я копировал код, и это, очевидно, была плохая идея, я исправил это сейчас, спасибо. - person Matija; 18.12.2013