これはばかげているかもしれないと思いますが、私は何時間もそれに固執しています。
メールアドレスがすでにデータベースにあるかどうかを判断するためにajaxを使用したjquery検証を使用した単純なフォームがあります。よく働く。メールアドレスが見つかった場合は重複を報告し、見つからなかった場合はサイレントです。
しかし、新しいことがわかっている電子メールを入力し、フォームの残りの部分に入力して[送信]を押すと、フォームの送信が妨げられ、電子メールフィールドにフォーカスが設定されます。
jQueryは次のとおりです。
$(document).ready(function(){
var email;
var name;
var passwd;
var passwd_repeat;
//form validation rules
$("#regForm1").validate({
rules: {
name: {
required: true,
minlength: 3,
},
passwd: {
required: true,
minlength: 8,
},
passwd_repeat: {
required: true,
equalTo: passwd,
minlength: 8
}
},
messages:
{
name: "Please enter your name.",
passwd: "Please enter a password.",
passwd_repeat: "Passwords must match."
}
});
$.validator.addMethod("validateUserEmail", function(value, element) {
var inputElem = $('#regForm1 :input[name="email"]'),
data = { "email=" : inputElem.val() },
eReport = ''; //error report*/
var dataString = 'email='+ inputElem.val();
$.ajax( {
type: "POST",
url: '/checkdups.php',
data: dataString,
success: function(html) {
if (html !== 'true') {
$('#email').after('<label class="error" for="email">error - '+inputElem.val()+' already in use. Please <a href="http://tester4.com/staff/auth/login">Log in</a> with '+inputElem.val()+'.</label>');
return false;
}
else {
return true;
}
},
error: function(xhr, textStatus, errorThrown)
{
alert('ajax loading error... ... '+url + query);
return false;
}
});
},
'');
$(':input[name="email"]').rules("add", { "validateUserEmail" : true} );
});
.remoteを使用する代わりにaddMethodを使用してルールを追加しています。これは、最初から動作させることができなかったため(つまり、ページを更新しないと一連の重複を拒否しないため)、これは次のように提案されました。回避策。追加したメソッドをコメントアウトすると、フォームを送信できますが、もちろん重複をチェックしません。
とにかく、どんな洞察も大歓迎です。
ジョン