0

時間値の入力フォームに 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") を正しく更新しません (同じクラスの別のフィールドにフォーカスする必要があるため)。

4

1 に答える 1

0

コードの何が問題なのかわかりませんが、それを行う1つの方法は、フォーカスを関数に入れることです。

そう ...

function focusIt()
{
  var mytext = document.getElementById("divId");
  mytext.val("");
  mytext.focus();
}

そして、if/else 文から呼び出す...

if (ungueltiges)
{
alert("invalid time");
focusIt()      

}
于 2012-06-14T10:51:30.897 に答える