最初のセクションが正しく完了すると、ページを更新せずに 2 番目のセクションがロードされます。
私の問題は、2 番目のセクションが完了したら、検証を実行する必要があり、サーバーに誤ったデータが送信されないようにする必要があることです。送信ボタンの最初のクリックで検証が機能しますが、送信ボタンをもう一度クリックするとフォーム入力フィールドのデータが修正されなくても、間違ったデータが送信されますか?
私は答えをオンラインで検索し、いくつかの異なることを試しました:
2番目の送信方法を次のように変更してみました:
$('infoform').submit(function() {
// .. stuff
});
しかし、これはうまくいきませんでした。
$('#submit_second').submit(function(evt){
evt.preventDefault();
...
});
しかし、これも機能しませんでした。検証が完全に機能しなくなっただけですか?
私が望むのは、入力されたデータが正しくなるまで検証でエラーをチェックし続け、データのエラーがなくなったら、ajax 呼び出しを使用して送信することです。
フォームのコードは次のとおりです。
<form id="infoform" name="infoform" action="#" method="post">
<div id="first_step">
<!--<h1>WANT A FREE<br />SOCIAL MEDIA<br />AUDIT?</h1>-->
<div class="formtext-img"></div>
<div class="form">
<label for="username">Facebook or Twitter page address:</label>
<input type="text" name="url" id="url" value="http://" />
</div><!-- clearfix --><div class="clear"></div><!-- /clearfix -->
<input class="submit" type="submit" name="submit_first" id="submit_first" value="" />
</div><!--end of first step-->
<div id="second_step">
<div class="form">
<div id="nameInput">
<label for="yourname">Your Full Name. </label>
<!-- clearfix --><div class="clear"></div><!-- /clearfix -->
<input type="text" name="yourname" id="yourname" placeholder="Your name" />
</div>
<!-- clearfix --><div class="clear"></div><!-- /clearfix -->
<div id="emailInput">
<label for="email">Your email address.</label>
<input type="text" name="email" id="email" placeholder="Email address" />
</div>
<!-- clearfix --><div class="clear"></div><!-- /clearfix -->
<div id="phoneInput">
<label for="phone">Your contact number. </label>
<!-- clearfix --><div class="clear"></div><!-- /clearfix -->
<input type="text" name="phone" id="phone" placeholder="contact number" />
</div>
</div> <!-- clearfix --><div class="clear"></div><!-- /clearfix -->
<!--<input class="back" type="button" value="" />-->
<input class="send submit" type="submit" name="submit_second" id="submit_second" value="" />
</div><!--end of second step-->
</form>
そして、これが私のjQueryです。2つの「submit_second」関数を1つにマージしようとしましたが、2番目の送信ボタンがクリックされたときに何も起こらなくなりました!
$('#submit_second').click(function(){
//remove classes
$('#second_step input').removeClass('error').removeClass('valid');
var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
var phonePattern = /^\+?[0-9]{0,15}$/ ;
var fields = $('#second_step input[type=text]');
var error = 0;
fields.each(function(){
var value = $(this).val();
if( value.length<1 || value==field_values[$(this).attr('id')] || ( $(this).attr('id')=='email' && !emailPattern.test(value) ) ) {
$(this).addClass('error');
$(this).effect("shake", { times:3 }, 50);
error++;
} else {
$(this).addClass('valid');
}
if( value.length<1 || value==field_values[$(this).attr('id')] || ( $(this).attr('id')=='phone' && !phonePattern.test(value) ) ) {
$(this).addClass('error');
$(this).effect("shake", { times:3 }, 50);
error++;
} else {
$(this).addClass('valid');
}
});
$('#submit_second').click(function(){
url =$("input#url").val();
yourname =$("input#yourname").val();
email =$("input#email").val();
phone =$("input#phone").val();
//send information to server
var dataString = 'url='+ url + '&yourname=' + yourname + '&email=' + email + '&phone=' + phone;
//alert (dataString);
$.ajax({
type: "POST",
url: "#",
data: "url="+url+"&yourname="+yourname+"&email="+email+'&phone=' + phone,
cache: false,
success: function(data) {
console.log("form submitted");
alert(dataString);
}
});
return false;
});