別のフィールドの値が変更されたときに、あるフィールドで特定のjquery-unobtrusiveルールをトリガーする方法はありますか?
2つの日付フィールド(開始/終了など)があり、検証が。end
より大きくなければならないフォームがありますstart
。end
これは、設定済みの後で変更するという単純なケースでは正常に機能しstart
ます。それがしないのは許可することです:
end
最初に設定してから設定するstart
start
両方がすでに設定された後に変更し、制約に違反する
サーバー側の検証はもちろんそれをキャッチしend
ますが、修正した後でも設定されたままのエラーstart
があるか、の値がend
無効な値に変更されてもエラーが表示されないのは悪いことです。特定のルールをトリガーする理由は、ユーザーが値を入力する前に、同じフィールドでルールrequired
またはフォーマットルールを実行したくないためです。date
フォームは「クリーン」から始まります。ただし、それが不可能な場合は、すべてのルールを実行しても問題ありません。
コードサンプルがないことをお詫びしますが、これからどこから始めればよいのかさえわかりません。
アップデート:
今のところ私が行ったことは、モデルを掘り下げて(これは、asp.net mvcプロジェクトであるため)、属性を見つけて、そのプロパティを直接読み取ることです。
var controllerCtx = ViewContext.Controller.ControllerContext;
var da = ViewData.ModelMetadata.GetValidators(controllerCtx)
.SelectMany(x => x.GetClientValidationRules())
.Where(x => x.ValidationType == "isdateafter")
.FirstOrDefault();
var otherid = da == null ? "" : da.ValidationParameters["propertytested"];
次に、通常のHTML部分で、でテストを実行し、start
それが日付ピッカーであるかどうかを確認してから、基本的なチェックを接続し、すべての検証ルールを実行します。end
ルールはあまりないので、実行する前にフィールドに値があるかどうかを確認するだけです。以下の独創的なソリューションを使用したいと思います。今週少し自由な時間があれば、それを試してみます。
@if (otherid != "") {
<text>
var other = $("#@otherid");
if (other && other.hasClass('hasDatepicker')) { // if the other box is a date/time picker
other.datetimepicker('option', 'onSelect', function(dateText, instance) {
var lowerTime = $(this).datetimepicker('getDate');
$("#@id").datetimepicker('option', 'minDate', new Date(lowerTime.getTime()));
if ($("#@id").val()) { // if there is a value in the other
$('form').data('validator').element('#@id');
}
});
}
</text>
}