2016-05-20 3 views
1

私の連絡先フォームでjqueryの検証プラグインを使用しています。名前は1文字以下)フォームを提出すると、間違ったデータを含むメールが送信されます。エントリがすべて正しければ、ボタンがアクティブにならないようにするにはどうすればよいですか?jQueryの検証は機能しますが、項目が正しくない場合でもフォームを送信できます

$(document).ready(function() { 
    var newHTML = '<div class="col-sm-12 text-center" style="color:white; background-color:#6f8595; padding-bottom:15px; border-radius:5px;"><h3>Thank you for your message!<br />We will get back to you as soon as possible!</h3></div>'; 

    $('#myform').validate(); 

    $('.btn').click(function(){ 
     var data = $("#myform").serialize(); 
     $('.form').html('').append(newHTML); 
     $.post("includes/sendmail.php", {data}); 
    }); 
}); 
+0

https://jqueryvalidation.org/valid – mplungjan

答えて

2

$(function() { 
    var newHTML = '<div class="col-sm-12 text-center" style="color:white; background-color:#6f8595; padding-bottom:15px; border-radius:5px;"><h3>Thank you for your message!<br />We will get back to you as soon as possible!</h3></div>'; 
    $('#myform').validate(); 
    $('#myform').on("submit",function(e){ 
    e.preventDefault(); 
    if ($(this).valid()) { 
     var data = $(this).serialize(); 
     $(this).html(newHTML); 
     $.post("includes/sendmail.php", {data}); 
    } 
    }); 
}); 

またdocumentationに応じてあなたはハンドラを提出し、検証にAJAX呼び出しを実行することができます - このようなもの:

$('#myform').validate({  
    submitHandler: function(form) { 
    var data = $(form).serialize(); 
    $(form).html(newHTML); 
    $.post("includes/sendmail.php", {data}); 
    return false; 
    } 
}); 
+0

このコードを使用すると、投稿後にサイトがリロードされます。これは避けたいものです。 – sklrboy

+1

e.preventDefault();提出を停止し、再ロードしないでください。もしそれが再ロードされた場合は、エラーメッセージ – mplungjan

+0

でコンソールにメッセージが表示されます。最初に検証し、正しい場合はhtmlの内容を変更します。さらに、それははっきりと理解できる。ありがとうございました! – sklrboy

0

問題を解決するために、このコードを試してみてください。

このよう
$(document).ready(function() { 

    var newHTML = '<div class="col-sm-12 text-center" style="color:white; background-color:#6f8595; padding-bottom:15px; border-radius:5px;"><h3>Thank you for your message!<br />We will get back to you as soon as possible!</h3></div>'; 

    $('#myform').validate({ 
    onSuccess: function(form) { 
     var data = $(form).serialize(); 
     $.post("includes/sendmail.php", {data}); 
     $(form).html(newHTML); 
     return false; 
    } 
    }); 
}); 
+1

これはフォームを提出し、それにAjaxしようとする – mplungjan

+0

パーフェクト、コードは期待どおりに動作し、結果はまさに私が望んだものです。しかし、その$ form変数はonSuccess関数のどこから来ますか?その部分は私が(まだ)得ることはありません。 – sklrboy

+0

削除 "return true;"提出を防ぐため。 –

関連する問題