2015-12-05 4 views
0

В форме подтверждения mi У меня есть два поля ввода для того, чтобы написать письмо и подтвердить его. Перед отправкой требуется 2 подтверждающих: 1-email должен стоять на вашем e-mail, 2-email должен совпадать по адресу электронной почты два раза. Я могу обрабатывать эти утверждения каждый из них, используя две отдельные функции javascript, но я терплю неудачу, когда пытаюсь проверить их все в атрибуте события onsubmit. Если я напишу правильный адрес электронной почты, форма дойдет до адресата действий, даже если подтверждение электронной почты не соответствует. Оглядываясь в интернете, мне не помогает. Здесь и есть код (HTML/JavaScript):javascript onsubmit событие для проверки нескольких функций не работает

<!DOCTYPE html> 
<head> 
    <meta charset="UTF-8"> 
    <title>Email Validation</title> 

    <script type="text/javascript"> 

     function isEmail(email, output) { 
      var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;   
      var email = document.getElementById(email).value; 

      if (regex.test(email)) { 
       return true; 
      } else { 
       document.getElementById(output).innerHTML = 'wrong email'; 
       return false; 
      } 
     } 


     function compareEmail(email, emailToCompare, output){ 
      var email = document.getElementById(email).value; 
      var emailToCompare = document.getElementById(emailToCompare).value; 

      if(emailToCompare == email){ 
       document.getElementById(output).innerHTML = 'ok!'; 
       return true; 
      }else{ 
       document.getElementById(output).innerHTML = 'emails dont match!'; 
       return false; 
      } 
     } 


     function check(){ 
      return isEmail() && compareEmail(); 
     } 

    </script> 

</head> 

<body> 

    <form action="file.php" method="post" onSubmit="return check()"> 
     <p>Email</p> 
     <input type="text" name="email" maxlength="50" id="email"> 
     <div id="email_result"> 
     </div> 
     <br/> 
     <p>Confirm email</p> 
     <input type="text" onpaste="return false;" autocomplete="off" name="email" maxlength="50" id="confirm_email" onKeyUp="return compareEmail('email', 'confirm_email', 'confirm_email_result')"> 
     <div id="confirm_email_result"> 
     </div> 

     <input type="submit" name="submit" value="Register" onclick="return isEmail('email', 'email_result');"> 
    </form> 

</body> 

Двойной контроль не работает с последующем сценарием тоже:

function check(){ 
    if (isEmail() && compareEmail()){ 
     return true; 
    }else{ 
     return false; 
    } 
} 

Ничего не меняется, если я использую:

onSubmit="return check()" 

или

onSubmit="check()" 

в виде атрибута события.

ответ

1

Вы пропускаете параметры в вызове функций:

function check(){ 
    return isEmail('email', 'email_result') && compareEmail('email', 'confirm_email', 'confirm_email_result'); 
} 

Side Примечание: Вы объявили переменные в функции с тем же именем в качестве параметров. Он по-прежнему работает, но переменные на самом деле не созданы, но будут перезаписывать значения параметров, поэтому код немного запутан.

+0

Thanks Guffa! Он работает сейчас, и спасибо за предложение о переменных по сравнению с параметрами, я переписал код без параметров. –

Смежные вопросы