jquery 検証 (bassistance) のリモート ルール機能にバグが見つかったと思います。jquery.validation 1.9.0 および 1.10.0 でテストしました。ここに私のHTMLとJSがあります:
<!DOCTYPE html>
<html lang="nl">
<head>
<meta charset="utf-8">
<script src="jquery-1.7.1.min.js"></script>
<script src="jquery.validate.js"></script>
</head>
<body>
<script>
$(document).ready(function() {
window.validater = $("#SignUpForm").validate({
rules: {
"initials": {
required: true
},
"lastname": {
required: true
},
"phonenumber": {
required: true,
remote: { url: "/checkPhoneNumber.php", async:false }
}
},
messages: {
"initials": {
required: "U heeft uw voorletters niet ingevuld"
},
"lastname": {
required: "U heeft uw achternaam niet ingevuld"
},
"phonenumber": {
required: "U heeft uw telefoonnummer niet ingevuld",
remote: "U heeft geen geldig telefoonnummer ingevuld (formaat: +311230123456).",
}
}
});
});
</script>
<form enctype="" name="SignUpForm" method="POST" action="" class="fbForm " id="SignUpForm" novalidate="novalidate">
<div class="fbElement fbTextfield ">
<label for="initials">Voorletters <span class="require">*</span> </label>
<input type="text" name="initials" value="" style="" title="" class="activePlaceholder" id="initials">
<label class="error" generated="true" for="initials" style="display: none;"></label>
</div>
<div class="fbElement fbTextfield ">
<label for="prefix">Tussenvoegsel </label>
<input type="text" name="prefix" value="" style="" title="" class="activePlaceholder" id="prefix">
<label class="error" generated="true" for="prefix" style="display: none;"></label>
</div>
<div class="fbElement fbTextfield ">
<label for="lastname">Achternaam <span class="require">*</span> </label>
<input type="text" name="lastname" value="" style="" title="" class="activePlaceholder" id="lastname">
<label class="error" generated="true" for="lastname" style="display: none;"></label>
</div>
<div class="fbElement fbTextfield ">
<label for="phonenumber">Telefoonnummer <span class="require">*</span> </label>
<input type="text" name="phonenumber" style="" value="+311230123456" class="activePlaceholder" id="phonenumber">
<label class="error" generated="true" for="phonenumber" style="display: none;"></label>
</div>
<div style="" class="fbContainer " id="navContainer">
<button data-loading-text="Laden..." onclick="" value="Verder" name="SignupFB_NextFB_next" class="submit " type="Submit" id="SignupFB_NextFB_next">Verder</button>
</div>
</form>
</body>
</html>
お気づきかもしれませんが、電話番号フィールドにリモート ルールがあります。remoterule 自体は問題なく動作します。テスト目的で、checkPhoneNumber.php には以下が含まれています。
<?php
$valid = 'false';
echo $valid;
私は本当に async:false が必要です。そうしないと、最初に電話番号フィールドを手動でクリックしてajax-requestをトリガーしないと、フォームを送信できません。これは、stackoverflow の既知の問題です。ただし、 async:false を追加すると、上記のフィールドに検証メッセージが表示されません。phonenumber フィールドの下のフィールドには、この問題はありません。電話番号フィールドをイニシャル フィールドの上に移動すると、検証メッセージに問題はありません。
この問題を解決する方法を知っている人、またはウォークアラウンドを知っている人はいますか?
前もって感謝します、
ウィリアム