https://eonasdan.github.io/bootstrap-datetimepicker/日付ピッカーをノックアウトで使用し、ノックアウト検証フレームワークの ISODate 検証を使用しています。
日付ピッカーで見つけたのは、無効な日付がキーボードで入力された場合 (keepInvalid: true)、ピッカーによって dp.error イベントが発生することです。その後、キーボードで日付を修正すると、ピッカーは dp.change イベントを発生させません。これは、ピッカーによる予期された正しい動作ですか? その場合、以下に説明するように、ユーザーの懸念に対処するために使用できる回避策はありますか?
日付ピッカーを使用する場合、ISODate 検証は起動しません。しかし、ユーザーがテキストボックスに入力したものをピッカーが自動的に修正しないようにしたいと考えています。代わりに、基になるオブザーバブルを無効なエントリで更新し、ノックアウト検証を起動して、エラー検証状態で UI を更新する必要があります。
日付値がサイレントに変更されたという通知がないため、キーボードで入力された無効な日付の自動修正について苦情を受けています。
したがって、オプション keepInvalid: true でピッカーを使用しています。バインディング ハンドラーは、dp.change イベントでオブザーバブルを更新します。提案されたバインディング ハンドラーを更新して、dp.error イベントのオブザーバブルも更新しました。
これは私が必要とすることをほとんど行います。しかし、私が次のことをすると:
- ピッカーで今日の日付を選択すると、「2016-04-22」がテキスト ボックスに入力されます (観察可能)。
- キーボードを使用して無効な文字を挿入し、テキスト ボックスに「2016-0a4-22」が表示されるようにします (観察可能)。望ましい動作であるノックアウト検証が起動します。
- キーボードで無効な文字を削除して日付を修正し、テキスト ボックスを「2016-04-22」に戻します。ノックアウト検証はクリアされません。これは、テキスト ボックスを更新して誤った値を削除するときに、「dp.change」イベントが発生していないためです。この時点で、テキスト ボックスには '2016-04-22' が含まれていますが、基になるオブザーバブルにはまだ無効な '2016-0a4-22' があります。
キーボードではなくピッカーを使用して日付を修正すると、dp.change イベントが発生し、検証エラー状態が解消されます。しかし、キーボードを使用して修正する場合はそうではありません。