jquery 検証プラグインを使用しています。サイトをデプロイした後にのみ発生する問題を発見しましたが、それでも断続的に発生するようです。無効なフィールドを含むフォームを送信すると、送信できなくなりますが、無効なフィールドには無効であることを示すメッセージが表示されません。フィールドにカーソルを置いてからタブアウトすると、検証メッセージが表示されます。また、スクリーン キャプチャを取得すると表示が更新され、メッセージが表示されるようです。この問題は複数のフィールド タイプで発生しますが、ここでは例として 1 つを示します。
<input name="ProjectDescription" class="required" id="ProjectDescription" style="text-transform: uppercase;" type="text" maxLength="15" value=""/>
これが私の検証呼び出しです。
$('#RequestForm').validate({
ignore: ":hidden",
ignoreTitle: true,
submitHandler: function () {
var f = $('#RequestForm');
var action = '/Request/Request'
var serializedForm = f.serialize();
$.post(action, serializedForm,
function (rtn) {
$("#Submit").removeAttr('disabled');
if (rtn.Success == true) {
var data = rtn.Result;
$('form')[0].reset();
$.jGrowl("Submitted Successfully", { life: 10000 });
}
else {
$.jGrowl(rtn.ErrorMessage, { sticky: true });
}
});
$("#Submit").attr('disabled', 'disabled');
return false;
},
invalidHandler: function (event, validator) {
debugger
console.log(validator);
}
});
そして私のボタンハンドラー
$('#Submit').click(function () {
$('#RequestForm').submit();
});
この問題をフィドルや他の場所で再現することはできませんでした。このリクエストを書き込んでいる間に、再び発生することはなくなりましたが、コードを変更していません。この種の動作を引き起こす原因についての助けをいただければ幸いです。主にIE 9でテストしています
アップデート:
問題を確実に再現する方法を見つけることができませんでしたが、可能であればフィドルの作成を試み続けます。同じブラウジング セッション中に、突然動作を開始します。多くの場合、ブラウザを閉じて再度開くことで、さらに 3 ~ 4 回試行すると、動作が表示されます。コメントに基づいて、フィールドでぼかしと非表示/表示を呼び出してみました。これらのいずれも、エラー メッセージが表示される原因になりません。印刷画面ボタンを押すか、フィールドにカーソルを置いてタブを押すと、検証メッセージが確実に表示されます。ソリューションに関する追加情報:
ページは MVC 3 によって生成されます。フィールドの表示/非表示に JavaScript と ajax をかなり使用します。
フィールドの表示/非表示は、ajax コールバックで発生しています。
この特定のフィールドは、によって表示/非表示にされています
if (project.PAContractClassID == "CAPITAL") { // capital
$('.capitalOnly').show();
$('.expenseOnly').hide();
}
else if (project.PAContractClassID == "EXPENSE") { // expense
$('.expenseOnly').show();
$('.capitalOnly').hide();
}
フィールドを生成するための MVC からの私のコード
@Html.TextBoxFor(m => m.ProjectDescription, new { @name="ProjectDescription", @class = "required", maxlength = "15", style = "text-transform:uppercase;" })