Moritz: Problem mit Reihenfolge von Events

Hallo zusammen,
ich habe eine Frage zur "Abarbeitung" von Events:

Ich habe ein HTML-Formular mit einen Input-Text-Feld und einem Link zum Abschicken des Formulars.
Dem Input-Feld habe mich mit jquery einen 'blur'-Eventhandler zugewiesen. D.h. beim Verlassen des Feldes wird überprüft, ob die eingegebene Textlänge lang genug ist. Wenn nicht, öffnet sich eine Thickbox (http://jquery.com/demo/thickbox/) mit einer Fehlermeldung.
Der "Submit"-Button im Formular besteht aus einem Link à la <a onclick="document.form.submit();".... Nach dem Klick auf diesen Link wird ebenfalls eine Thickbox geöffnet, diesmal mit der Meldung "Daten werden übertragen".

Soweit so gut.
Folgende Situation: Der User jetzt den Cursor in das Textfeld und schreibt dort einen Text hinein, der zu kurz ist. Danach klickt der User direkt auf den Link zum Abschicken des Dokuments.

Wie kann ich in diesem Fall steuern, welcher Event-Handler zuerst "abgearbeitet" wird?
Denn mit dem Klick auf den Link wird zum einen der onblur-Handler vom Input-Feld aufgerufen, zum anderen wird ja aber auch der onclick-Handler vom Link angesprochen.

Bei meinen Tests habe ich festgestellt, dass mal der eine, mal der andere Event-Handler zuerst angesprochen wird.

Ich hoffe ihr könnt mir weiterhelfen.

Gruß,
Moritz

  1. Hallo,

    Bei meinen Tests habe ich festgestellt, dass mal der eine, mal der andere Event-Handler zuerst angesprochen wird.

    Es ist eigentlich irrelevant, deswegen würde ich gar nicht weiter in diese Richtung forschen. Du kannst in deinem Script den aktuellen Status speichern, daher kannst du auch abfragen, ob vor dem Submit ein Blur-Ereignis passierte oder umgekehrt. Beim Schließen der Thickbox, nachdem sie beim blur geöffnet wurde, setzt du diesen Flag zurück, sodass der Submit wieder möglich wird.

    Darüber hinaus würde ich dir raten, mit den Events change und submit zu arbeiten. Dann kannst du mit einen normalen Submit-Button (input oder button) verwenden, den du mit CSS beliebig umgestalten kannst, und die Funktionsfähigkeit deines Formular ist nicht auf einen JavaScript-Link angewiesen. Das Submit-Ereignis tritt außerdem üblicherweise ein, wenn der Anwender in einem einzeiligen Textfeld Enter drückt. Formularüberprüfungen sind daher am besten im Handler des submit-Ereignisses untergebracht. Das Absenden des Formulars kannst du darin im Fehlerfalle auch abbrechen, indem der Handler mit return false; beendet wird.

    Mathias

  2. Bei meinen Tests habe ich festgestellt, dass mal der eine, mal der andere Event-Handler zuerst angesprochen wird.

      
    <input [...] onClick="init();" [...]></input>  
    
    
      
    function init()  
    {  
     machFunktion1();  
     machFunktion2();  
      
     if([...]) [...]  
     else [...]  
      
     machFunktion3();  
     machFunktion4();  
    }  
    
    

    Somit kannst du mit einem Klick eine Funktion aufrufen, die dieanderen nach der Reihenfolge aufruft.