2012-10-01 147 views
1

我有形式小問題,我使用JS進行驗證。表單驗證錯誤

這裏是我的表單代碼。

<form method="get" onkeydown="checkEnter()" action="emailform.php" id="signupform" name="subscribe"> 
    <input name="email" id="email" type="text" value="Enter Email for Updates" onfocus="if(this.value=='Enter Email for Updates'){this.value=''};" /> 
    <input type="hidden" name="submitted" id="submitted" value="true" /> 
</form> 

id signupform我用於驗證和提交表單是按下輸入按鈕。

但是有問題,當把signupform然後我的驗證開始工作很好,當我輸入正確的郵箱是顯示我的錯誤,當我刪除signupform ID,然後在我的表單提交做工精細未經驗證。

這裏是ID signupform我的JS代碼。

function SubscribeForm() { 
    $('#signupform').submit(function() { 
    $('.email').removeClass('error') 
    $('em.error').remove(); 

    var error = false; 
    var emailReg = /^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/; 

    if ($.trim($('.email').val()) == '') { 
     $(this).append('<em class="error">Please enter your email address.</em>'); 
     $(this).addClass('error'); 
     error = true; 
    } else if (!emailReg.test(jQuery.trim($('.email').val()))) { 
     $(this).append('<em class="error">Please enter a valid email address</em>'); 
     $(this).addClass('error'); 
     error = true; 
    } 
    if (!error) { 
     $("#submit", this).after('<span id="form_loading"></span>'); 
     var formValues = $(this).serialize(); 

     $.post($(this).attr('action'), formValues, function (data) { 
     $("#signupform").before(data); 
     }); 

     $(':input[type="text"]').attr('value', ''); 
    } 
    return false 
    }); 
} 
+0

真的很感謝你的幫助。我希望它的小問題或我錯過的東西。 –

回答

0

感謝您的幫助夥計們。我只是把這個,現在工作正常。

$('#signupform').submit(function(){ 
     $('.email').removeClass('error') 
     $('em.error').remove(); 
     var filter = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/; 
     sEmail = document.getElementById('email').value; 
     if (filter.test(sEmail)) { 

      return true; 
     } 
     else { 
      if(sEmail == '') 
      { 
       $(this).append('<em class="error">Please enter your email address</em>'); 
       $(this).addClass('error'); 
      } 
      else 
      { 
       $(this).append('<em class="error">Please enter a valid email address</em>'); 
       $(this).addClass('error'); 
      } 
      return false; 
     } 
    }); 
}); 
1

變化

return false 

return error; 

它是造成問題。

+0

不,它仍然不起作用 –

+0

它只是再次刪除整個驗證。 –

1

變化

返回FALSE;

返回錯誤!;

此外,添加CSS類「電子郵件」輸入電子郵件字段,或者改變了jQuery選擇器代碼「.email」到‘#email’

0

另外一個可能的解決方案,如果你不需要以支持舊的瀏覽器:placeholder

<input placeholder="Enter email" type="text"... /> 
+0

是啊,我也知道,但我需要舊的瀏覽器支持:( –

+0

的* *正確的方法是支持,是這樣的:http://webdesignerwall.com/tutorials/cross-browser-html5-placeholder-text不幸的是,我們並不總是有時間來重寫:/ – Zlatko