フィールドが検証に合格したときにエラー メッセージを表示することはできないと思います。プラグインの内部には、フィールドが検証に合格したときにすべてのラベルを非表示にするコードがあります。ただし、効果をシミュレートしようとしているだけかもしれません。
これを試してみたい場合は、最終的に解決策につながる可能性のある洞察を提供します.
highlight
とのunhighlight
コールバックを見てください。これらの補完機能は、合否アイコンの表示などのために設計されました。
ここに、デフォルトのコードを示します。
highlight: function (element, errorClass, validClass) {
if (element.type === "radio") {
this.findByName(element.name).addClass(errorClass).removeClass(validClass);
} else {
$(element).addClass(errorClass).removeClass(validClass);
}
},
unhighlight: function (element, errorClass, validClass) {
if (element.type === "radio") {
this.findByName(element.name).removeClass(errorClass).addClass(validClass);
} else {
$(element).removeClass(errorClass).addClass(validClass);
}
},
デフォルトのerrorPlacement
コールバックは次のとおりです。
errorPlacement: function (error, element) {
error.insertAfter(element);
},
コールバックにはデフォルトはsuccess
ありませんが、ドキュメントに従って、成功時にラベルにテキストを配置するために使用できます。
success: function (label) {
label.removeClass('error').addClass('valid').text('ok')
},
error
とは & 要素のvalid
デフォルトの CSSであるため、おそらく次のようにそれらの色を活用できます...class
label
label.valid {
color: #00f;
}
label.error {
color: #f00;
}
テストに使用できる jsFiddle は次のとおりです: http://jsfiddle.net/7TPvP/
これは、すべてのコールバック関数とオプションに関するドキュメントです: http://docs.jquery.com/Plugins/Validation/validate#toptions
コードに関する注意事項:
引用OP:
「エラー配置コードが再度実行されないようで、現在、青と赤の両方のラベルが表示されています。」
これは、実際のlabel
(エラーのプラグインによって作成された) が既に一度配置されているためです。再度配置する必要はありません。何かを継続的にオン/オフしたい場合は、highlight
およびunhighlight
コールバック関数を見てください。
編集:
ここにあなたが望むものに非常に近いものがあります。まだまだ微調整が必要ですね…
デモ: http://jsfiddle.net/2mwfG/
$(document).ready(function () {
$('#myform').validate({ // initialize the plugin
// other options and rules,
highlight: function (element, errorClass, validClass) {
if (element.type === "radio") {
this.findByName(element.name).addClass(errorClass).removeClass(validClass);
} else {
$(element).addClass(errorClass).removeClass(validClass);
$(element).prev('.mandatory').hide(); // <-- added this
}
},
unhighlight: function (element, errorClass, validClass) {
if (element.type === "radio") {
this.findByName(element.name).removeClass(errorClass).addClass(validClass);
} else {
$(element).removeClass(errorClass).addClass(validClass);
$(element).prev('.mandatory').show(); // <-- added this
}
},
errorPlacement: function (error, element) {
error.insertAfter(element);
}
});
});