2

今日のようにmaxdateが設定されたdatepickerがあります。これが私がそれを定義した方法です:

$('selector').datepicker({
yearRange: "c-100:+0",
maxDate: '+0d',
changeMonth : true,
changeYear : true,
showAnim:"fold"
});

maxDateプロパティは、ユーザーがdatepickeruiから選択したときに正常機能します。将来のすべての日付が無効として表示されます。ただし、datepickerを使用すると、ユーザーはキーボードから日付を入力することもできます。これが問題の始まりです。

DatePickerは、ユーザーがEnterキーを押したとき(フォームを送信したとき)に手動で入力されたテキストの値を検証しますが、ぼやけてからフォームが送信されたときは検証しません。つまり、ユーザーがEnterキーを押さずに入力ボックスから出たとき。これにより、日付を最大日付より大きくすることができ、エラーを表示せずに送信できます。

テキスト入力を読み取り専用にすることはできますが、その場合、ユーザーはキーボードから日付を入力できません。

私はjqueryを初めて使用するので、ぼかしで検証するプロパティが不足していますか?

4

2 に答える 2

2

日付ピッカーフィールドが過去の日付であることを検証したいと考えており、ユーザーがフィールドを離れるときに検証が行われていないようです。私はDatePickerに精通していないため、ユーザーが将来の日付でフィールドを離れるときに具体的に呼び出すことができる検証メソッドがありますが、ユーザーが離れるときに独自の検証ルーチンをかなり簡単に作成できます。日付ピッカーフィールドからフォーカスを外します。

テスト済み:

$("selector").blur(function(e) {
    var today = new Date();
    if ( $(this).datepicker("getDate") > today ) {
        alert("Incorrect");
        // Here you could force their field to be equal to 
        // today if you would like or handle it otherwise
    }
});

送信時にフィールドを検証することもできます。

ただし、これらのすばらしい保護がすべて整っていても、サーバー側での検証の代わりにこれらを使用することはできません。ユーザーがJavascript保護を回避し、将来の日付を含むフォームを送信した場合に備えて、適切なエラーメッセージを検証して提供する必要があります。それがあなたを助けることを願っています。

更新これは、将来の値でフィールドを離れる動作を制限したい場合に備えて、ぼかしとフォーカスについての非常に興味深い議論です。それはあなたがしたい/使いたいことに当てはまるかもしれないし、当てはまらないかもしれません。

もう1つの考えは、エラーメッセージでは、入力する日付の種類(YYYY-mm-dd)をできるだけ説明して、さまざまな観点(mm / dd / yyなど)のユーザーが理由を理解できるようにすることです。彼らの入力は拒否されています。

于 2012-05-15T12:33:00.040 に答える
2

これは jquery datepicker のバグのようです。veeTrain で述べられているように、テキスト ボックスの独自の検証を記述する必要があります。または、既製のものが必要な場合は、これをご覧ください。http://keith-wood.name/uiDatepickerValidation.html

于 2012-05-15T12:42:42.703 に答える