参考資料:
- jQuery 検証: デフォルトのエラー メッセージの変更
- http://jqueryvalidation.org/jQuery.validator.addMethod
- http://jqueryvalidation.org/jQuery.validator.format
質問:
なぜ jQuery.validation の「ドキュメント」は非常にわかりにくく、基本的な例でさえ深刻に欠けているのでしょうか?
本当の質問:
AJAX 呼び出しを行うカスタム バリデーターがあります。その呼び出しは、さまざまなエラー メッセージを必要とするさまざまな値を返す可能性があります。応答に基づいてエラー メッセージを変更する方法がわかりません。いくつかのコード:
<html>
<head>
<script>
// Set error value variable default & scope
var checkEmailErrorMessage = "API Error";
// AJAX Failure Error
checkEmailError = function(jqXHR, textStatus, errorThrown) {
if (jqXHR.status == 404) {
alert("Could not find the API Server (404)");
} else {
alert("Some horrifying error occurred: " + textStatus);
}
return false;
};
// AJAX Success Handler
checkEmailResponse = function(data, code, jqXHR) {
switch (data.code) {
case 200:
return true;
case 401:
checkEmailErrorMessage = "Duplicate Email";
alert("Sorry, our system has detected that an account with this email address already exists");
break;
case 403:
checkEmailErrorMessage = "Invalid Email";
alert("Sorry, our system has detected that this email is forbidden");
break
case undefined:
alert("An undefined error occurred.");
break;
default:
alert("A horrible error occurred.");
break;
}
return false;
};
// The Custom Validator
jQuery.validator.addMethod("checkEmail", function(value, element) {
$.ajax({
type: "POST",
cache: "false",
async: "false",
url: "/json/checkEmail",
dataType: "json",
data: {
email: function() {
return $("#email").val();
}
},
success: checkEmailResponse,
error: checkEmailError
});
}, checkEmailErrorMessage);
// The Validator Settings
form_validation_settings = {
onkeyup: false,
rules: {
"email": {
required: true,
minlength: 2,
maxlength: 42,
email: true,
checkEmail: true
}
}
};
// The Binding
$(document).ready(function(){
$('#MyForm').validate(form_validation_settings);
});
</script>
</head>
<body>
<!-- the Form -->
<form id="MyForm">
<input type="text" name="email"/>
<input type="submit" name="submit"/>
</form>
</body>
</html>
なんといってもエラーメッセージは「API Error」。検証ドキュメントには次のように記載されています。
メッセージ: 「jQuery.validator.format(value)」によって作成された関数にすることができます。
しかし、どうすればこれを装備できますか?私が呼び出す関数はすべて、AJAX 呼び出しの結果である必要があります。
どんなアイデアでも大歓迎です。前もって感謝します!