JavaScript (JQuery) onblur und onsubmit

  • Hi Leute,

    ich stehe vor folgender Herausforderung:
    Ich habe ein Textfeld (input type="text") und einen Image-Submit (input type="image") Button in einem Formular.

    - auf dem Textfeld liegt ein onBlur()-Event
    - das Formular besitzt ein onSubmit()-Event

    Wenn der Focus bzw. der Cursor im Textfeld ist und der Benutzer ohne zuvor das Textfeld zu verlassen mit der Maus auf den Submit-Button kliegt, soll nur die onSubmit Funktion ausgeführt werden und nicht auch noch die onBlur.
    Habe ich eine Möglichkeit das so umzusetzen? (wäre für mich die einfachste Lösung)
    Ansonsten müssen wir noch mehr ins Detail gehen, aber ich hoffe, dass dies nicht nötig sein wird.

    EDIT: Falls dies nicht möglich ist, kann ich sicher davon ausgehen, dass das onBlur-Event in oben beschrieben Szenario immer vor dem onSubmit vollständig ausgeführt wird?

    Viele Grüße
    CroWeHaMmeR

    Einmal editiert, zuletzt von CroweHammer (17. Oktober 2012 um 11:04)

  • mach doch sowas wie $('#deintextfeld').blur = null oder setz ne variable zum steuern der aktion
    oder
    $('#deintextfeld').blur(function(){return false;})

    edit:

    wobei das blur vorm submit ausgeführt wird...
    mmh also ohne code zum testen is sowas immer lame

  • Kann ich denn sicher sagen, dass das onBlur() vor dem onSubmit() ausgeführt wird? Vor allen Dingen, dass die onBlur() fertig abgearbeitet ist, bevor die onSubmit() aufgerufen wird?
    Dann könnte ich das Ganze über ein Boolean lösen oder eine Steuervariable.
    Ich habe nämlich in beiden Events einen ajax-Request und will vermeiden, dass beide ausgelöst werden.

    Viele Grüße
    CroweHammer

  • naja console.log und der firebug sind deine freunde :)

    und beim ajax, wenn du jquery nutzt mach den request async-parameter auf false
    und dann lass dir was onblur und was onsubmit ausgeben, ganz am ende und ganz am anfang der funktion machste nen console.log('blur_start') bzw 'blur_end' und dann schauste mal in die konsole und siehst was wie ausgeführt wird ;)

  • onBlur()-Event wird vor onSubmit()-Event gestartet. Beide Funktionen die vom Event aufgerufen werden laufen dann aber potentiell parallel, du kannst dich nicht darauf verlassen, dass das onBlur-Event abgearbeitet ist bevor das onSubmit-Event ausgeführt wird.
    Eine der nervigsten Sachen bei JS überhaupt, imho.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Sers Leute,

    danke für die Hilfe. Es funktioniert leider immer noch nicht. Das Problem, dass SinnlosS beschrieben hat ist genau die Sache die ich nicht in den Griff bekomme.
    Async kann ich nicht verwenden, weil ich einen XML Cross-domain request habe. Deshalb fällt async an dieser Stelle weg.
    Noch jemand eine Idee, wie ich das lösen könnte?

    Viele Grüße,
    CroWe

  • Sers Leute,

    danke für die Hilfe. Es funktioniert leider immer noch nicht. Das Problem, dass SinnlosS beschrieben hat ist genau die Sache die ich nicht in den Griff bekomme.
    Async kann ich nicht verwenden, weil ich einen XML Cross-domain request habe. Deshalb fällt async an dieser Stelle weg.
    Noch jemand eine Idee, wie ich das lösen könnte?

    Viele Grüße,
    CroWe


    Ein mir persönlich dreckig anmutender Workaround wäre beim Starten des onBlur-Events ein Variable blurEventRunning auf true zu setzen und beim Beenden wieder auf false.
    Im onSubmit-Event wird diese Variable geprüft, steht sie auf true wird in ein Intervall gesprungen das z.B. im Zehntel-Sekunden-Takt prüft ob das Blur-Event beendet ist und erst dann weitermacht.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • crowehammer, ich schau die letzten tage immer wieder hier rein und hoffe weiterhin auf code (und die noch ausstehe4nde erläuterung ;) )
    eventuell gibt es ja maßgeschneidert eine lösung für dich.

    ich hab zuletzt eine suggested search entwickelt (bzw den clientside part) und da hab ich auch blur nutzen wollen, was aber nicht ging, weil ich damit andere wichtige funktionalität geschreddert hab/hätte auch dafür gabs dann ein workaround mit custom event was nur zu bestimmten gegebenheiten auslöst....

    für zeitliche abfolge sind callbacks gedacht, aber bei einem fall wie dem deinen hier ist parallelität nicht ausgeschlossen, aber das hat ja sinnloss bereits erläutert

  • Hi zusammen,

    den gesamten Code kann ich geschäftlich bedingt nicht hier reinposten. Sorry!!!
    Ich habe jetzt eine andere Herausforderung bevor ich wieder zurück zur hier beschrieben Grundproblematik kommen kann.
    Ich habe eine globale Variable isChecked, welche mit 0 initialisiert wird.
    Ich rufe bei onsubmit() eine Funktion auf in der ich warten will, bis isChecked != 0 ist und erst dann das return von onsubmit() durchführen.

    Habe ich eine Möglichkeit mit dem return zu warten bis clearInterval() durchgeführt wurde?