asp.net MVC 上に構築されたアプリがあり、twitters ブートストラップを使用しています。ブートストラップ スタイルを機能させるために、以下を追加しました。
$.validator.setDefaults({
highlight: function (element) {
$(element).closest(".control-group").addClass("error");
},
unhighlight: function (element) {
$(element).closest(".control-group").removeClass("error");
}
});
ここまでは順調ですね。今日、サイトに cleditor を追加しましたが、テキストエリアの検証が失われました。そこで、それを修正する次のコードを追加しました。
$.validator.setDefaults({ ignore: '' });
次に、検証の前にテキストエリアで何らかの作業を行う関数を追加しました。これは必須フィールドなので、スペース、非改行スペース、改行のみが含まれているかどうかをテストしています。もしそうなら、私はそれをクリアして、私の検証がそれを適切にキャッチします。
$('#myForm').submit(function () {
var contents = editor[0].$area[0].value;
var patt1 = new RegExp('^((<br>)*(\s)*( )*)*$');
if (contents.match(patt1))
editor[0].$area[0].value = '';
return true;
});
この関数は検証の前にトリガーされ、フォームの送信が停止され、エラー メッセージが表示されますが、これはすべて問題ありません。問題は、上記で設定されたバリデーターのデフォルトがトリガーされないため、フィールドが適切にスタイル設定されないことです。
奇妙なことに、もう一度フォームを送信すると、バリデーターのデフォルトが実行され、フィールドが適切にスタイル設定されます。
MVC でカスタム検証属性を作成することでこれを回避できますが、なぜこのように動作するのか、また修正できるかどうかを知りたいです。
余談ですが、スペースや改行などの組み合わせを見つけるために上記で使用している正規表現は機能していません。私はそれを2つの正規表現テスターに入れましたが、正常に動作します。私のアプリでは、一致が見つかりません。私は正規表現の初心者なので、おそらくそれを書くためのはるかに良い方法があります。