2013-10-06 16 views
0

Я думал, что проблемы решены, но моя проблема все еще происходит.Ошибка JavaScript JavaScript Validation

Каждый раз, когда я нажимаю кнопку «Отправить», моя форма по-прежнему отправляется. Я думал, что у меня есть JavaScript, правильно проверяющий форму, но она не работает, потому что я могу поместить что-либо в поля электронной почты и все еще обрабатывать. Предупреждения все еще работают. Я просто хочу использовать PHP и JavaScript, нет AJAX или что-то еще. Вот мой код:

<?php 

$to = '[email protected]'; 
$subject = 'Voice4Autism Inquiry'; 

$FirstName = $_POST['fname']; 
$LastName = $_POST['lname']; 
$eMail = $_POST['email']; 

$message = <<<EMAIL 

Hi!<br /><br/> 

My name is $FirstName $LastName. I am interseted in your newsletter from Voice4Autism. Please add $eMail to your listserve.<br /><br /> 

Thank you,<br /> 
$FirstName $LastName 

EMAIL; 

$header = "From: $eMail\r\n"; 
$header = "Content-type: text/html\r\n"; 

if($_POST){ 
    mail($to, $subject, $message, $header); 
} 
?> 

JAVASCRIPT

<script type="text/javascript"> 
function checkforblank() { 
    var errormessage = ""; 

    if (document.getElementById('fname').value ==""){ 
     errormessage += "enter your first name \n"; 
    } 
    if (document.getElementById('lname').value ==""){ 
     errormessage += "enter your last name \n"; 
    } 
    if (document.getElementById('email').value ==""){ 
     errormessage += "enter your email \n"; 
    } 
    if (document.getElementById('confirmEmail').value ==""){ 
     errormessage += "confirm your email \n"; 
    } 

    if (errormessage != ""){ 
     alert(errormessage); 
     return false; 
    } else return true; 
} 

function verifyEmail() { 
    var status = false;  
    var emailRegEx = /^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$/i; 

    if (document.myForm.email.value.search(emailRegEx) == -1) { 
       alert("Please enter a valid email address."); 
       return false; 
    } 


    if (document.getElementById('email').value == document.getElementById('confirmEmail').value) { 
     alert("Thank you for your interest!"); 
      return true;    
    } else { 
     alert("Email addresses do not match. Please retype them to make sure they are the same."); 
     return false; 
    } 

    return status; 
} 

function confirmEmailAddresses(){ 
    if (checkforblank() == true) { 
     if (verifyEmail() == true) { 
      document.getElementById("myForm").submit(); 
     } 
    } 
} 
</script> 

HTML

<form name="myForm" action="contact.php" method="post" enctype="application/x-www-form-urlencoded" onsubmit=""> 
<table width="377" height="96" align="center"> 
    <tr> 
    <td style="text-align: right">First Name:</td> 
    <td><label for="FirstName"></label> 
     <input type="text" name="fname" id="fname"></td> 
    </tr> 
    <tr> 
    <td style="text-align: right">Last Name:</td> 
    <td><label for="LastName"></label> 
     <input type="text" name="lname" id="lname"></td> 
    </tr> 
    <tr> 
    <td style="text-align: right">E-mail:</td> 
    <td><input type="email" name="email" id="email"></td> 
    </tr> 
    <tr> 
    <td style="text-align: right">Confirm E-mail:</td> 
    <td><input type="email" name="confirmEmail" id="confirmEmail"></td> 
    </tr> 
</table> 
<p align="center"><input type="submit" value="Send" onClick="confirmEmailAddresses()"><input type="reset" value="Reset Form"></p> 

</form>    
+0

Возможно, вы можете отправить HTML-форму. Спасибо –

+0

Я сделал сегодня! Извините за задержку! – user2638775

+0

Спасибо! Я поставил ответ ниже! Я надеюсь, что это помогает? –

ответ

0

Вы можете попробовать

return false; 

после каждого вашего предупреждения() вызывает.

+0

Спасибо за отзыв! Я попробую. Просто какое-то разъяснение ... после того, как * каждый * из моих предупреждений звонит? Форма прекрасно подана в Firefox и Chrome, но не в Safari. – user2638775

+0

Итак, я попробовал «return false», но теперь он не работает в любом браузере. Любые другие предложения? Я ценю помощь! – user2638775

1

Я думаю, это то, что вы ищете:

<script> 
function checkforblank() { 
    var errormessage = ""; 

    if (document.getElementById('fname').value ===""){ 
     errormessage += "enter your first name \n"; 
    } 
    if (document.getElementById('lname').value ===""){ 
     errormessage += "enter your last name \n"; 
    } 
    if (document.getElementById('email').value ===""){ 
     errormessage += "enter your email \n"; 
    } 
    if (document.getElementById('confirmEmail').value ===""){ 
     errormessage += "confirm your email \n"; 
    } 

    if (errormessage !== ""){ 
     alert(errormessage); 
     return false; 
    } 
    else{return true;} 
} 

function verifyEmail() { 
    var status = false;  
    var emailRegEx = /^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$/i; 
    var email_reg = document.getElementById('email').value; 

    if (!email_reg.match(emailRegEx)) { 
       alert("Please enter a valid email address."); 
       return false; 
    } 


    else if (document.getElementById('email').value !== document.getElementById('confirmEmail').value) { 
     alert("Email addresses do not match. Please retype them to make sure they are the same."); 
      status = false;    
    } else { 
     alert("Thank you for your interest!"); 
     status = true; 
    } 

    return status; 
} 

function confirmEmailAddresses(){ 
    if((checkforblank())&&(verifyEmail())){return true;}else{return false;} 


} 

И называют эту функцию следующим образом:

<form name="a" method="post" onSubmit="return confirmEmailAddresses()" action="xyz.html" id="a"> 
+0

Я пробовал это, но он все еще отправлен в Safari. – user2638775

+0

И он по-прежнему отправляет пустые формы, если не заполняется вообще. – user2638775

+0

@ user2638775 где именно вы вызываете «confirmEmailAddresses()»? – Jinandra

0

не то, что вы хотите? Если форма недействительна, вы хотите показать предупреждение и не отправлять форму, не так ли?

Это может помочь, чтобы увидеть форму HTML, где вы звоните confirmEmailAddresses()

+0

Неверная форма отправляется только в Safari. Это довольно странно! Я ценю помощь! Я все еще работаю над этим! – user2638775

1

Попробуйте удалить onClick событие от кнопки отправки, а также добавить return confirmEmailAddresses(); в onsubmit случае основного элемента формы.

Убедитесь, что функция confirmEmailAddresses() имеет линию return true;, если проверка прошла! Else return false;.

+0

Я сделал все это без успеха. . :(Я ценю вашу помощь, хотя это код у меня есть: функции confirmEmailAddresses() { \t если (checkforblank() == TRUE) { \t \t если (verifyEmail() == TRUE) { \t \t \t document.getElementById ("Myform") представляет(); \t \t \t возвращение ложным; \t \t} \t}} у меня также есть:. function confirmEmailAddresses() { if ((checkforblank()) && (verifyEmail())) {return true;} else {return false;} – user2638775

+0

Вместо "document.getElementById (" myForm "). Submit();" попробуйте использовать «return true». Если вы вызываете функцию «onsubmit», как описано выше, убедитесь, что она говорит «return confirmEmailAddress();» форма теперь ожидает, что true или false будут возвращены. Извините, я упустил это раньше! –