2014-04-11 97 views
-1

我写了一个函数,它应该实际验证表单数据。它会检查每个输入是否有值,以及电子邮件格式是否正确。当一切都很好时,它应该提交该表格并通过php发送。这是在Ajax中完成的,因为我不想刷新页面。此外,提交按钮应该在表单发送时更改其值。通过jquery ajax doens't work验证表单

,这里是我的jsfiddle,因为它是很多代码: http://jsfiddle.net/qY6uu/

<form id="form" method="POST"> 
     <input type="text" class="" name="name" placeholder="Bitte verrate uns Deinen Namen." id="anfrage-name"/> 
     <input type="email" class="" name="email" placeholder="Und nun Deine E-Mail-Adresse..." id="anfrage-email"/> 
     <textarea name="message" class="" placeholder="...gefolgt von Deiner Nachricht an uns." rows="6" id="anfrage-kaufen"></textarea> 
     <span id="error-message"></span> 
     <input type="submit" class="send-button" value="Anfragen" id="anfrage-abschicken"/> 
    </form> 

,在这里我的jQuery

$(document).ready(function() { 
    var form = $('#form'); // contact form 
    var submit_button = $('#anfrage-abschicken'); // submit button 
    var error = $('#error-message'); // alert div for show alert message 

    // form submit event 
    $('#anfrage-abschicken').click(function() { 
     var sEmail = $('#anfrage-email').val(); 
     var sName = $('#anfrage-name').val(); 
     var sMessage = $('#anfrage-kaufen').val(); 

     //if nothing is in 
     if ($.trim(sMessage).length == 0 && $.trim(sName).length == 0 && $.trim(sEmail).length == 0){ 
      $('#error-message').text('Alle Felder müssen ausgefüllt werden.'); 
      return false; 
     } 

     //no name 
     else if ($.trim(sName).length == 0) { 
      $('#error-message').text('Bitte verrate uns Deinen Namen.'); 
      $('#anfrage-name').focus(); 
      return false; 
     } 

     //no email 
     else if ($.trim(sEmail).length == 0) { 
      $('#error-message').text('Deine E-Mail-Adresse musst Du angeben, damit wir Dir anworten können.'); 
      $('#anfrage-email').focus(); 
      return false; 
     } 

     //No message 
     else if ($.trim(sMessage).length == 0) { 
      $('#error-message').text('Eine Nachricht musst Du uns schon hinterlassen.'); 
      $('#anfrage-kaufen').focus(); 
      return false; 
     } 

     //if everything is right (name, message, email, email format) 
     else if (validateEmail(sEmail) && $.trim(sMessage).length > 0 && $.trim(sName).length > 0 && $.trim(sEmail).length > 0) { 
      $.ajax({ 
       url: '', // form action url 
       type: 'POST', // form submit method get/post 
       dataType: 'html', // request type html/json/xml 
       data: form.serialize(), // serialize form data 
       beforeSend: function() { 
        error.fadeOut(); 
        submit_button.html('Sending....'); // change submit button text 
       }, 
       success: function(data) { 
        error.html(data).fadeIn(); // fade in response data 
        form.trigger('reset'); // reset form 
        submit_button.html('Send Email'); // reset submit button text 
       }, 
       error: function(e) { 
        console.log(e) 
       } 
      }); 
     } 

     //wroong email format 
     else { 
      $('#error-message').text('Dein E-Mail-Format stimmt nicht.'); 
      $('#anfrage-email').focus(); 
      return false; 
     } 
    }); 
}); 

//function for validating email format 
function validateEmail(sEmail) { 
    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})(\]?)$/; 
    if (filter.test(sEmail)) { 
     return true; 
    } 
    else { 
     return false; 
    } 
} 
+0

添加验证电子邮件代码。此外,您不需要在ajax请求之前检查&& $ .trim(sMessage).length> 0 && $ .trim(sName).length> 0 && $ .trim(sEmail).length> 0'在此if语句之前已经检查过长度> 0。 – Cyclonecode

+0

是的,我检查它,因为如果没有任何形式,它会显示一条消息。我只想在每个输入都正确时执行ajax函数! validateEmail低于 – fjw

+0

除非你的问题是关于jQuery Validate插件,否则不要使用[tag:jquery-validate]标签。标签描述在选择标签时清晰显示...请放慢速度,阅读其描述,如果与您的问题无关,请不要选择它。 – Sparky

回答

0

按钮值需要改变而不是HTML。您需要更改val()

更改:

submit_button.html('Send Email'); 

到:

submit_button.val('Send Email'); 

你需要防止表单提交的违约event.preventDefault()
Demo

+0

@fjw:试试这个,让我知道它是否工作。看我的小提琴jquery。 –

+0

是的,在jsfiddle它的工作原理,但在Dreamweaver和Firefox中预览不幸的是:... D – fjw

+0

那么它不是这个部分的jQuery的问题。看来你有更多的JavaScript。一些地方这种形式是通过提交jquery'form.submit()' –

0

你的按钮是一个提交按钮。所以每当你点击提交按钮它获得子mitted。它不会等待JavaScript代码被执行。

更改您的提交按钮按钮类别,而不是提交类型像

<input type="button" class="send-button" value="Anfragen" id="anfrage-abschicken"/> 

然后点击按钮将不会触发表单提交。然后点击你的JavaScript代码将编码的按钮将被执行。

+0

我已经改变了这一点,但它仍然刷新页面 – fjw

+0

这里更新的小提琴页链接它工作正常与按钮类型http:// jsfiddle的更改。 net/qY6uu/2/ –

+0

可能是您应该检查一些开发人员工具天气您的更改正在反映与否。没有提交按钮,没有办法提交表单并刷新页面 –