Marc: onsubmit über Hyperlink auslösen

Einen wunderschönen guten Abend.

Ich grübel schon den ganzen Tag über ein Problem.

Ich muss in einem HTML-Document unbedingt einen doppelten submit verhindern.

Klar, da gibt es auf form-Ebene den Befehl "onSubmit". Doch leider soll bei mir der "submit" selbst über einen "href" (href=document.form.submit();) ausgelöst werden.

Gut, dann habe ich eine kleine javascript funktion geschrieben, die den submit verhindert. Aber wenn ich nun das zweitemal diese funktion aufrufe, während ich schon auf einen antwort vom server warte, dann interpretiert der Browser das wie eine zurückgekommene Seite und auf das Serverergebnis kann ich dann lange warten :-(

Hat jemand eine idee?

ich muss nur irgendwie über einen hyperlink das form, so dass auch der onsubmit mitverarbeitet wir.

Über vorschläge wäre ich dankbar.

vielen dank im voraus

Gruß Marc

  1. Einen wunderschönen guten Abend.

    Ich grübel schon den ganzen Tag über ein Problem.

    Ich muss in einem HTML-Document unbedingt einen doppelten submit verhindern.

    Klar, da gibt es auf form-Ebene den Befehl "onSubmit". Doch leider soll bei mir der "submit" selbst über einen "href" (href=document.form.submit();) ausgelöst werden.

    Gut, dann habe ich eine kleine javascript funktion geschrieben, die den submit verhindert. Aber wenn ich nun das zweitemal diese funktion aufrufe, während ich schon auf einen antwort vom server warte, dann interpretiert der Browser das wie eine zurückgekommene Seite und auf das Serverergebnis kann ich dann lange warten :-(

    Hat jemand eine idee?

    ich muss nur irgendwie über einen hyperlink das form, so dass auch der onsubmit mitverarbeitet wir.

    Über vorschläge wäre ich dankbar.

    vielen dank im voraus

    Gruß Marc

    Hi,

    ich verstehe Dewin Problem nicht ganz:

    mit <a href="#" onClick="document.forms['formularname'].submit()">Hier klicken</a> kannst Du das Formular verschicken. Dabie ist es an sich egal, wie oft der User darauf klickt. Er sendet ja nur eine Anfrage an den Server. Was der Server daraus macht ist eine ganz andere Sache. Ich vermute mal, daß Du ein doppeltes Absenden z.B. eines Gästebucheintrags verhindern möchtest. Dies könntest Du auch sreverseitig bewerkstelligen, indem Du z.B. die IP mitloggst und eine IP-Speere von 10 min oder so setzt.

    Falls Du das unbedingt mit JS realisieren mußt/willst, kannst Du folgendes machen:

    <script>

    var gesendet=0;

    function senden()
    {
     if (gesendet==0)
        {
          gesendet++;
          document.forms['formularname'].submit();
          return false;    # verhindert das "Ausführen" des Link, also den Verweis nach oben
        }
     else
        {
          alert("Formular wurde schon abgeschickt");
          return false;
        }
    }
    </script>

    <a href="#" onClick="senden()">Hier klicken</a>

    Viele Grüße...

    Alex :)

    1. Einen wunderschönen guten Abend.

      Ich grübel schon den ganzen Tag über ein Problem.

      Ich muss in einem HTML-Document unbedingt einen doppelten submit verhindern.

      Klar, da gibt es auf form-Ebene den Befehl "onSubmit". Doch leider soll bei mir der "submit" selbst über einen "href" (href=document.form.submit();) ausgelöst werden.

      Gut, dann habe ich eine kleine javascript funktion geschrieben, die den submit verhindert. Aber wenn ich nun das zweitemal diese funktion aufrufe, während ich schon auf einen antwort vom server warte, dann interpretiert der Browser das wie eine zurückgekommene Seite und auf das Serverergebnis kann ich dann lange warten :-(

      Hat jemand eine idee?

      ich muss nur irgendwie über einen hyperlink das form, so dass auch der onsubmit mitverarbeitet wir.

      Über vorschläge wäre ich dankbar.

      vielen dank im voraus

      Gruß Marc

      Hi,

      ich verstehe Dewin Problem nicht ganz:

      mit <a href="#" onClick="document.forms['formularname'].submit()">Hier klicken</a> kannst Du das Formular verschicken. Dabie ist es an sich egal, wie oft der User darauf klickt. Er sendet ja nur eine Anfrage an den Server. Was der Server daraus macht ist eine ganz andere Sache. Ich vermute mal, daß Du ein doppeltes Absenden z.B. eines Gästebucheintrags verhindern möchtest. Dies könntest Du auch sreverseitig bewerkstelligen, indem Du z.B. die IP mitloggst und eine IP-Speere von 10 min oder so setzt.

      Falls Du das unbedingt mit JS realisieren mußt/willst, kannst Du folgendes machen:

      <script>

      var gesendet=0;

      function senden()
      {
      if (gesendet==0)
          {
            gesendet++;
            document.forms['formularname'].submit();
            return false;    # verhindert das "Ausführen" des Link, also den Verweis nach oben
          }
      else
          {
            alert("Formular wurde schon abgeschickt");
            return false;
          }
      }
      </script>

      <a href="#" onClick="senden()">Hier klicken</a>

      Viele Grüße...

      Alex :)

      Hi Alex,

      danke für Deine Antwort, doch leider bekomme ich so noch nichtmal den Submit ausgelöst.

      Hier meine Sourcen:

      <SCRIPT LANGUAGE="JavaScript">
      top.undoWait();

      function callDay(OPT)
        {
        document.form1.OPTION.value=OPT;
        if(top.checkDate(document.form1.DATE) && top.checkWait())
          {
          document.form1.submit();
          top.doWait();
          }
        return false;
        }
      </script>
      </head>
      <body onunLoad="top.cleanupInfo()" background="/images/bg_action.gif" leftmargin="17" marginwidth="17">
      <form name="form1" method="post" action="/scripts/MGrqispi93.dll">
      <a href="#" onClick="callDay('B')">backward</a>
      <a href="javascript:callDay('F')">forward</a>
      <a href="javascript:callDay('S')">search</a>

      Der Link "backward" ist nach Deinem Beispiel realisiert. Komischer weise macht dieser keinen submit. Es wird lediglich mit der funktion "top.doWait()" in einem Infobereich angezeigt, das der User bitte warten soll.

      Beide anderen Links machen auch den "submit".

      Nochmal zu meinem Problem.

      Löse ich den submit über meinen Link aus, dann blinkt in einem Infobereich "Bitte warten" und an den Server wird request geschickt. mache ich nichts weiter, alse keinen weiteren submit, dann bekomme ich wie gewohnt ein ergebnis zurück und das "Bitte warten" verschwindet wieder.

      Löse ich den submit wie gerade schon beschrieben aus, aber klicke dann erneut auf meinen Link, bevor der request zurück ist, dann bekomme ich einen alert('Bitte warten, bis der request verarbeitet ist!'). Im Info Bereich blinkt weiter "Bitte warten". So weit so gut, aber leider kann ich jetzt so lange warten wie ich will. Die Seite kommt einfach nicht mehr zurück.

      Jetzt kommt der Hammer. setze ich einen normalen "Submit-Button" auf das form und der lasse die funktion "callDay(OPT)" über den "onSubmit" ausführen, dann funktioniert alles wunderbar.
      Ich kann während dem Request klicken bis ich schwarz werde. Es blinkt die ganze Zeit "Bitte warten" und bei jedem klick bekomme ich die Msgbox. Ist der server fertig, dann bekomme ich wie gewohnt die Seite zurück.

      Ich bin wirklich RATLOS.

      Aber vielleicht klappt ja Deine methode und ich habe da einen Fehler übersehen.

      Kannst du Dir das bitte nochmal anschauen?

      Vielen Dank vorab

      Gruß Marc

      1. Einen wunderschönen guten Abend.

        Ich grübel schon den ganzen Tag über ein Problem.

        Ich muss in einem HTML-Document unbedingt einen doppelten submit verhindern.

        Klar, da gibt es auf form-Ebene den Befehl "onSubmit". Doch leider soll bei mir der "submit" selbst über einen "href" (href=document.form.submit();) ausgelöst werden.

        Gut, dann habe ich eine kleine javascript funktion geschrieben, die den submit verhindert. Aber wenn ich nun das zweitemal diese funktion aufrufe, während ich schon auf einen antwort vom server warte, dann interpretiert der Browser das wie eine zurückgekommene Seite und auf das Serverergebnis kann ich dann lange warten :-(

        Hat jemand eine idee?

        ich muss nur irgendwie über einen hyperlink das form, so dass auch der onsubmit mitverarbeitet wir.

        Über vorschläge wäre ich dankbar.

        vielen dank im voraus

        Gruß Marc

        Hi,

        ich verstehe Dewin Problem nicht ganz:

        mit <a href="#" onClick="document.forms['formularname'].submit()">Hier klicken</a> kannst Du das Formular verschicken. Dabie ist es an sich egal, wie oft der User darauf klickt. Er sendet ja nur eine Anfrage an den Server. Was der Server daraus macht ist eine ganz andere Sache. Ich vermute mal, daß Du ein doppeltes Absenden z.B. eines Gästebucheintrags verhindern möchtest. Dies könntest Du auch sreverseitig bewerkstelligen, indem Du z.B. die IP mitloggst und eine IP-Speere von 10 min oder so setzt.

        Falls Du das unbedingt mit JS realisieren mußt/willst, kannst Du folgendes machen:

        <script>

        var gesendet=0;

        function senden()
        {
        if (gesendet==0)
            {
              gesendet++;
              document.forms['formularname'].submit();
              return false;    # verhindert das "Ausführen" des Link, also den Verweis nach oben
            }
        else
            {
              alert("Formular wurde schon abgeschickt");
              return false;
            }
        }
        </script>

        <a href="#" onClick="senden()">Hier klicken</a>

        Viele Grüße...

        Alex :)

        Hi Alex,

        danke für Deine Antwort, doch leider bekomme ich so noch nichtmal den Submit ausgelöst.

        Hier meine Sourcen:

        <SCRIPT LANGUAGE="JavaScript">
        top.undoWait();

        function callDay(OPT)
          {
          document.form1.OPTION.value=OPT;
          if(top.checkDate(document.form1.DATE) && top.checkWait())
            {
            document.form1.submit();
            top.doWait();
            }
          return false;
          }
        </script>
        </head>
        <body onunLoad="top.cleanupInfo()" background="/images/bg_action.gif" leftmargin="17" marginwidth="17">
        <form name="form1" method="post" action="/scripts/MGrqispi93.dll">
        <a href="#" onClick="callDay('B')">backward</a>
        <a href="javascript:callDay('F')">forward</a>
        <a href="javascript:callDay('S')">search</a>

        Der Link "backward" ist nach Deinem Beispiel realisiert. Komischer weise macht dieser keinen submit. Es wird lediglich mit der funktion "top.doWait()" in einem Infobereich angezeigt, das der User bitte warten soll.

        Beide anderen Links machen auch den "submit".

        Nochmal zu meinem Problem.

        Löse ich den submit über meinen Link aus, dann blinkt in einem Infobereich "Bitte warten" und an den Server wird request geschickt. mache ich nichts weiter, alse keinen weiteren submit, dann bekomme ich wie gewohnt ein ergebnis zurück und das "Bitte warten" verschwindet wieder.

        Löse ich den submit wie gerade schon beschrieben aus, aber klicke dann erneut auf meinen Link, bevor der request zurück ist, dann bekomme ich einen alert('Bitte warten, bis der request verarbeitet ist!'). Im Info Bereich blinkt weiter "Bitte warten". So weit so gut, aber leider kann ich jetzt so lange warten wie ich will. Die Seite kommt einfach nicht mehr zurück.

        Jetzt kommt der Hammer. setze ich einen normalen "Submit-Button" auf das form und der lasse die funktion "callDay(OPT)" über den "onSubmit" ausführen, dann funktioniert alles wunderbar.
        Ich kann während dem Request klicken bis ich schwarz werde. Es blinkt die ganze Zeit "Bitte warten" und bei jedem klick bekomme ich die Msgbox. Ist der server fertig, dann bekomme ich wie gewohnt die Seite zurück.

        Ich bin wirklich RATLOS.

        Aber vielleicht klappt ja Deine methode und ich habe da einen Fehler übersehen.

        Kannst du Dir das bitte nochmal anschauen?

        Vielen Dank vorab

        Gruß Marc

        FIXED :-)

        Ich habe den Link geändert:

        vorher --> <a href="javascript:callDay('F')">forward</a>
        nachher --> <a href="#" onClick="callDay('F');return false">forward</a>

        1. Sorry, aber bei diesem Posting kann ich nicht mehr anders:

          http://learn.to/quote und </faq/#Q-09a>, verdammt nochmal!

          150 Zeilen Fullquote, und nur 6 Zeilen eigener Beitrag - Wahnsinn!

          Lösch gefälligst das Zeug, was schon lange ausdiskutiert ist! Sonst kriegst du irgendwann nämlich mal die Nachricht, daß deine Nachricht zu lang ist, obwohl du nur "find ich auch" hinzufügen wolltest.

          <grummel/>

          - Sven Rautenberg

          1. Lösch gefälligst das Zeug, was schon lange ausdiskutiert ist! Sonst kriegst du irgendwann nämlich mal die Nachricht, daß deine Nachricht zu lang ist, obwohl du nur "find ich auch" hinzufügen wolltest.

            Tja, diesmal war ich ja auch nicht ganz unschuldig :(
            Ich habe bei meinem Posting auch vergessen, das Vollquote zu löschen. Das kommt allerdings daher, daß immer ganz unten in der Antwort anfange und meine Nachricht schreiben und als das Quote aus der textarea war, da habe ich es schlicht und einfach vergessen zu löschen.

            Aber fällt "find ich auch" nicht unter </faq/#Q-05d> ;o)

            Viele Grüße und noch ein schönes Wochenende...

            Alex :)