時間値の入力フォームに JQuery と JavaScript を使用していますが、正しくない入力形式に対して意図した反応を提供する JavaScript を作成できません。
私は何を間違っていますか...?
クラス「azeit」(およびこれらの下に、クラス「projekt」の他のいくつか)を持つ3つのテキスト入力のセットがあります。すべてが時間値の入力に使用されます。ユーザーがフィールドを出るとすぐに、フォーマットを検証し、計算を行い、その結果を ID「summe1」のフィールドに表示します。これは機能します。フォーマットが正しくない場合はアラートを表示し、フィールドを空にした後にフィールドにフォーカスを戻します。ただし、フォーカスが返されることはありません (ただし、空になることは問題ありません)。これです:
var kalkuliere_azeit = function(e) {
var anf = $("#anfang");
var ende = $("#ende");
var pause = $("#pause");
var dauer_in_min = 0;
var ungueltiges = null;
if (nonempty(anf.val(), ende.val()), pause.val()))
{
if (!is_valid_date(make_date(anf.val()))){
ungueltiges = anf;
};
if (!is_valid_date(make_date(ende.val()))){
ungueltiges = ende;
};
if (!is_valid_date(make_date(pause.val()))){
ungueltiges = pause;
};
if (ungueltiges)
{
alert("invalid time"); //This is where I am stuck
ungueltiges.val("");
ungueltiges.focus();
}
else {
dauer_in_min = hourstring_to_min(ende.val())
- hourstring_to_min(anf.val())
- hourstring_to_min(pause.val());
$("#summe1").text(min_to_hhmm(dauer_in_min));
};
};
};
....
$(document).ready(function() {
$(".projekt").change( kalkuliere_summe);
$(".azeit").focusout(kalkuliere_azeit);
});
クラス「projekt」のフィールドは、クラス「azeit」のフィールドの下にあるため、ユーザーがクラス「azeit」の 3 番目のフィールドを離れると、それらのフィールドにフォーカスが移ります。
不完全なソース コードを提供して申し訳ありません。誰かが何が悪いのか見てくれることを願っています。
私が言及したい 1 つのポイントは、ハンドラーを onblur と onfocus にもバインドしようとしたことです。onfocus にバインドすると、フォーカスはフィールドにリセットされますが、ユーザーが最後に入力したフィールドはフィールド $("#summe1") を正しく更新しません (同じクラスの別のフィールドにフォーカスする必要があるため)。