Thami: Probleme mit Focus()

HAllo,

ich habe ein kleines Problem mit der Funktion focus.

Ich habe eine function checkDatum(infeld){...}
die bei Änderung des Feldes mit checkDatum(this) aufgerufen wird.
Die Funktion prüft ein Datum auf Gültigkeit und gibt bei Ungültigem Datum eine Fehlermeldung aus. Das klappt auch wunderbar. Ich möchte aber bei Fehleingabe automatisch in dieses Feld springen.
Das mache ich mit

infeld.focus();

Das interessiert Javascript aber nicht die Bohne.
Woran kann das liegen?

Vielen Dank für alle Antworten

Thami

  1. Hi,

    Ich habe eine function checkDatum(infeld){...}
    die bei Änderung des Feldes mit checkDatum(this) aufgerufen wird.

    Und was ist "this" zu diesem Zeitpunkt?

    Woran kann das liegen?

    z.B. daran, daß "this" nicht wie von Dir erwartet das Eingabefeld ist.
    Oder an tausend anderen Dingen - die aber ohne die betroffene Seite nicht erkennbar sind.

    Was sagt denn die Fehlerkonsole des Browsers?

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
    1. Hallo Andreas,

      wenn ich alert (infeld.name) mache gibt er mir den korrekten namen des Feldes aus. Die Fehlerkonsole sagt gar nichts.
      wenn ich infeld.style.backgroundColor="red"; mache wird auch das richtige Feld Rot nur focus() will nicht.

      LG Thami

  2. servus Thami,

    Die Funktion prüft ein Datum auf Gültigkeit und gibt bei Ungültigem Datum eine Fehlermeldung aus. Das klappt auch wunderbar.

    Wie wird die Fehlermeldung angezeigt? Ein alert()?

    Wenn die Fehlerkonsole nichts sagt, musst du uns schon das komplette Script zeigen, sonst fragen wir noch, ob dein Joghurt im Kühlschrank noch gut ist. Könnte ja auch daran liegen ;)

    der wurzelbert

    --
    "The depressing thing about tennis is that no matter how good I get, I´ll never be as good as a wall."
    1. Gut, hier also die gesamte Funktion und ein paarder datumsfelder die überprüftwerden.

        
      function checkDatum(infeld)  
      {  
        var Datum, Tag, Monat, Jahr, Laenge, tageMonat;  
        Datum = infeld.value;  
        Laenge=Datum.length;  
        
        if (Laenge==10 && Datum.substring(2,3)=="." && Datum.substring(5,6)==".")  
        {  
          Tag=parseInt(Datum.substring(0,2),10);  
          Monat=parseInt(Datum.substring(3,5),10);  
          Jahr=parseInt(Datum.substring(6,10),10);  
        
          if (Monat==4 || Monat==6 || Monat==9 || Monat==11)  
          {  
            tageMonat=30;  
          }  
          else if (Monat==1 || Monat==3 || Monat==5 || Monat==7 || Monat==8 || Monat==10 || Monat==12)  
          {  
            tageMonat=31;  
          }  
          else if(Monat==2 && Jahr%4==0 && Jahr%100!=0 || Jahr%400==0)  
          {  
            tageMonat=29;  
          }  
          else if(Monat==2 && Jahr%4!=0 || Jahr%100==0 && Jahr%400!=0)  
          {  
            tageMonat=28;  
          }  
        
          if (Tag>=1 && Tag<=tageMonat && Monat>=1 && Monat<=12)  
          {  
            infeld.style.backgroundColor="white";  
            return true;  
          }  
          else  
          {  
            alert ("kein gütiges Datum!");  
            infeld.focus();  
            infeld.style.backgroundColor="lightred";  
            return false;  
          }  
        }  
        else  
        {  
          alert ("Bitte das Datum in der Form tt.mm.jjjj eingeben.");  
          infeld.focus();  
          infeld.style.backgroundColor="lightred";  
          return false;  
        }  
      }  
      
      
        
      <input type="text" id="id_eintritt_datum" 			name="eintritt_datum" value=""  onchange="checkDatum(this)";>  
      <input type="text" id="id_austritt_datum" 			name="austritt_datum" value=""  onchange="checkDatum(this)";>  
      <input type="text" id="id_kuend_eingang_datum" 	name="kuend_eingang_datum" value=""  onchange="checkDatum(this)";>  
      <input type="text" id="id_kuend_best_datum" 		name="kuend_best_datum" value=""  onchange="checkDatum(this)";>  
      
      
      1. Die FArbangabe im Script ist natürlich quatsch. Muss red heißen nich lightred.

      2. servus Thami,

        Das Problem liegt wohl am onchange-Event. Ich habe es auf andere Weise ausprobiert, mit window.onload, da funktioniert es einwandfrei. Eine Erklärung konnte ich aber nicht finden, sorry. Das Problem gab es aber schon öfter, die Leute haben es dann mit einem Timeout gelöst. Ob das eine optimale Lösung ist, sei dahin gestellt. Vielleicht wissen die Kollegen hier noch etwas.

        der wurzelbert

        --
        "The depressing thing about tennis is that no matter how good I get, I´ll never be as good as a wall."
        1. servus wurzelbert,

          Führe die Prüfung der Felder doch erst durch, wenn das Formular abgeschickt werden soll.

          der wurzelbert

          --
          "The depressing thing about tennis is that no matter how good I get, I´ll never be as good as a wall."
          1. servus wurzelbert,

            du solltest Thami anreden, wenn du ihn meinst.

            der wurzelbert

            --
            "The depressing thing about tennis is that no matter how good I get, I´ll never be as good as a wall."
            1. Hallo wurzelbert,

              der Thami ist eine Die. Aber da meine Mutter schon meinte, dass an mir drei Jungs verloren gegangen seinen habe ich damit kein Problem. ;-)

              Zu dem Vorschlag mit dem Prüfen beim absenden. Da es mehrere Datumsfelder gibt ist das dann mit dem Focus etwas schwierig. Aber da das mit dem Feld einfärben gut klappt lass ich es jetzt so. Dann sehen die Leute ja uch wo der fehler war.

              Danke für die Diskussion

              LG Thami