MaximilianB: "return false" als Abbruchbedingung für Formular

Hallo,

mich bedrückt da nen Problem mit Javascript seit dem letzten Firefoxupdate.
Ich habe bisher immer folgenden Code problemlos verwenden können (im übertragenen Sinne, ist jetzt nicht mein Originalformular):

<form action="datei.php">  
   <input type="submit" onclick="javascript:c=confirm('Formular absenden?'); if (c==false) return false;" />  
</form> 

Das ganze hat bewirkt, dass jemand auf Absenden geklickt hat zuvor eine Box kam, die fragte ob das Formular wirklich gesendet werden soll. Klickte man auf Abbrechen passierte nichts, bei Klick auf OK wurde das Formular gesendet.
Analog dazu ging das ganze mit Links (ebenfalls wieder nicht mein Originallink):

 <a href="datei.php" onclick="javascript:c=confirm('Eintrag l&ouml;schen?'); if (c==false) return false;">Löschen?</a>  

Das einzige was funktioniert ist, wenn eine solche Abfrage im onload-Parameter von <body> ist:
<body onload="javascript:c=confirm('Seite wechseln?'); if (c==true) window.location.href = 'datei.php'; else return false;">

Die Abfragen so umzuschreiben, dass er das ganze so prüft...
if (c==true) { return true; } else { return false; }
...hat nichts gebracht.

Das ganze tritt wie oben schon gesagt erst seit dem letzten Update vom Firefox auf. Im Internet Explorer funktioniert alles Tadellos...

Weiß jemand ne Lösung bzw. Alternativcode mit dem das ganze funktioniert hierfür? Ich hab nämlich keine große Lust alle Sicherheitsabfragen die ich so erstellt habe in PHP-Code umzusetzen.

LG,
Max

  1. Hi,

    mich bedrückt da nen Problem ...

    ja, deine Grammatik ist kaputt. Es heißt "ein Problem", nicht "einen Problem". Die Verwendung umgangssprachlicher Kurzformen ändert daran nichts.

    <input type="submit" onclick="javascript:c=confirm('Formular absenden?'); if (c==false) return false;" />

    Da sind mehrere Portionen Unsinn drin.
    Die erste ist schon das Label "javascript:". Was willst du damit erreichen? Nein, es ergibt absolut keinen Sinn und ist völlig zweckfrei.

    Dann die umständliche Formulierung:
      c=confirm('Formular absenden?'); if (c==false) return false;

    Das if (c==false) will in Wirklichkeit nur if (!c) heißen. Aber davon abgesehen ist die Einführung einer zusätzlichen Variablen hier überhaupt nicht notwendig. Warum nicht kürzer und damit übersichtlicher:
     return (confirm('Formular absenden?'));

    Klickte man auf Abbrechen passierte nichts, bei Klick auf OK wurde das Formular gesendet.

    Genau das passiert auch bei der bereinigten Fassung, die ich oben erwähnt habe.

    Analog dazu ging das ganze mit Links (ebenfalls wieder nicht mein Originallink):

    <a href="datei.php" onclick="javascript:c=confirm('Eintrag l&ouml;schen?'); if (c==false) return false;">Löschen?</a>

      
    Hier gilt genau dasselbe. In allen erwähnten Punkten.  
      
    
    > Das einzige was funktioniert ist, wenn eine solche Abfrage im onload-Parameter von <body> ist:  
    > `<body onload="javascript:c=confirm('Seite wechseln?'); if (c==true) window.location.href = 'datei.php'; else return false;"> `{:.language-HTML}  
      
    Auch hier gilt wieder: `if (c==true)`{:.language-javascript} ist äquivalent zu `if (c)`{:.language-javascript}. Und ein return ergibt im onload-Handler keinen Sinn. Welche Standardaktion möchtest du damit unterdrücken?  
      
    
    > Weiß jemand ne Lösung bzw. Alternativcode mit dem das ganze funktioniert hierfür?  
      
    Nein, weil du bisher noch gar keine Problembeschreibung geliefert hast, an der man ansetzen könnte.  
      
    
    > Ich hab nämlich keine große Lust alle Sicherheitsabfragen die ich so erstellt habe in PHP-Code umzusetzen.  
      
    Aha. Lieber in Javascript, so dass sie bei Besuchern mit deaktiviertem JS überhaupt nicht ausgeführt werden.  
      
    So long,  
     Martin  
    
    -- 
    Wer schläft, sündigt nicht.  
    Wer vorher sündigt, schläft besser.
    
    1. Hallo,

      abgesehen davon, dass meine Grammatik rein garnichts mit dem Problem zu tun hat, ist der Ansatz, dass das Label "javascript:" da nichts verloren hat die Lösung.

      Im Übrigen habe ich mit diesem Abschnitt mein Problem beschrieben:

      Klickt man auf Abbrechen passierte nichts, bei Klick auf OK wurde das Formular gesendet.

      Aha. Lieber in Javascript, so dass sie bei Besuchern mit deaktiviertem JS überhaupt nicht ausgeführt werden.

      Wenn man davon ausgeht, dass ich das ganze ausschließlich für nen Adminbereich nutze, ist die JS-Lösung vollkommen ausreichend.

      Trotzdem danke...

      LG,
      Max

      1. Hallo Max,

        Im Übrigen habe ich mit diesem Abschnitt mein Problem beschrieben:

        Klickt man auf Abbrechen passierte nichts, bei Klick auf OK wurde das Formular gesendet.

        nein, das ist die Beschreibung "keines Problems", denn das ist doch wohl genau das gewünschte und zu erwartende Verhalten. Du hast nicht verraten, was denn in deinem Problemfall _wirklich_ passiert.

        Aha. Lieber in Javascript, so dass sie bei Besuchern mit deaktiviertem JS überhaupt nicht ausgeführt werden.
        Wenn man davon ausgeht, dass ich das ganze ausschließlich für nen Adminbereich nutze, ist die JS-Lösung vollkommen ausreichend.

        Also nur für dich selbst? Dann hast du die Einstellungen natürlich im Griff, und die Lösung mag okay sein. Sobald es aber auch für andere User ist, sollte man Javascript mit Bedacht einsetzen und ggf. ein Fallback für den Fall bereithalten, dass JS nicht verfügbar ist.

        Ciao,
         Martin

        --
        Die letzten Worte der Challenger-Crew:
        Lasst doch mal die Frau ans Steuer!
    2. Dann die umständliche Formulierung:
        c=confirm('Formular absenden?'); if (c==false) return false;
      Das if (c==false) will in Wirklichkeit nur if (!c) heißen.

      Sagt wer? ICh finde es sauberer, explizit zu nennen was geprüft werden soll. Ist aber eine Frage des persönlichen Stils und keine der Funktionalität

      Zum Thema: Auch ich sehe nicht, warum dein Sktipt plötzlich nicht mehr funktionieren sollte. Allerdings wundert mich die Sinnhaftigkeit deines onload-JavaScripts.

      Übrigens musst du für alert-Boxes und so weiter keine Zeichen-Kodierung benutzen. &auml; wird also zu ä

      Grüße.

      1. Hallo,

        c=confirm('Formular absenden?'); if (c==false) return false;
        Das if (c==false) will in Wirklichkeit nur if (!c) heißen.
        Sagt wer?

        sage ich.
        Denn die if-Anweisung wertet sowieso ihr Argument auf "wahr" oder "nicht wahr" aus. Das heißt, alles was als Boolscher Ausdruck interpretiert nicht false ergibt, gilt automatisch als wahr und erfüllt die Bedingung.
        Einen Ausdruck (z.B. einen Variablenwert) nochmal explizit auf Gleichheit mit true zu prüfen, ist daher sinnlos; ein expliziter Vergleich mit false entspricht einer boolschen Negierung.
        Du schreibst doch auch nicht
          if ((c==1)==true)
        Oder doch? Denn das müsstest du, wenn du deine Argumentation konsequent umsetzt.

        ICh finde es sauberer, explizit zu nennen was geprüft werden soll.

        Ich auch. In diesem Fall ein Wahrheitswert, der bereits in einer Variablen vorliegt.
        Darüber hinaus vertrete ich die Ansicht, dass ein Ausdruck umso leichter zu verstehen und nachzuvollziehen ist, je weniger Unnötiges er enthält. Damit meine ich ausdrücklich _nicht_ Leerzeilen oder Zeilenumbrüche, die nur zur Strukturierung des Quellcodes dienen - die finde ich unbedingt notwendig.

        So long,
         Martin

        --
        Wenn zwei dasselbe tun, sind sie vielleicht bald zu dritt.
  2. mich bedrückt da nen Problem mit Javascript seit dem letzten Firefoxupdate.
    Ich habe bisher immer folgenden Code problemlos verwenden können (im übertragenen Sinne, ist jetzt nicht mein Originalformular):

    <form action="datei.php">

    <input type="submit" onclick="javascript:c=confirm('Formular absenden?'); if (c==false) return false;" />
    </form>

      
    a.) javascript: ist hier ein überflüssiges Label, wozu?  
    b.) schau dir mal den Rückgabewert von confirm an <http://de.selfhtml.org/javascript/objekte/window.htm#confirm> erst entweder true oder false, die Variabel und die Prüfung also auch überflüssig  
    c. kannst du so nicht das abschicken des Formulares verhindern (und konntest du auch noch nie) dazu muss der onsubmit Handler des Formulares ein false zurückgeben  
      
    
    > Das ganze hat bewirkt, dass jemand auf Absenden geklickt hat zuvor eine Box kam, die fragte ob das Formular wirklich gesendet werden soll. Klickte man auf Abbrechen passierte nichts, bei Klick auf OK wurde das Formular gesendet.  
      
    Nein, das kann nicht sein, zumindest nicht wenn der Code wie von dir gezeigt aufgebaut ist.  
      
      
    
    > Analog dazu ging das ganze mit Links (ebenfalls wieder nicht mein Originallink):  
    > ~~~
    
     <a href="datei.php" onclick="javascript:c=confirm('Eintrag l&ouml;schen?'); if (c==false) return false;">Löschen?</a>  
    
    > 
    
    

    Hier wurde dir ja auch schon die elegenatere Lösung gezeigt.
    <a href="datei.php" onclick="return confirm('Eintrag löschen?'); ">Löschen?</a>
    auch wieder:
    a. überflüssiges Label
    b. überflüssige Variabel und Abfrage
    c. Umlaute kannst du im Klartext schreiben wenn du den richtigen Zeichnesatz verwendest.

    Die Abfragen so umzuschreiben, dass er das ganze so prüft...
    if (c==true) { return true; } else { return false; }
    ...hat nichts gebracht.

    ist auch Unsinn.

    Das ganze tritt wie oben schon gesagt erst seit dem letzten Update vom Firefox auf. Im Internet Explorer funktioniert alles Tadellos...

    Du hast dir mal die Fehlerkonsole des FF angeschaut?
    und es ist kein Fehler darin?

    Weiß jemand ne Lösung bzw. Alternativcode mit dem das ganze funktioniert hierfür? Ich hab nämlich keine große Lust alle Sicherheitsabfragen die ich so erstellt habe in PHP-Code umzusetzen.

    Das ist eigentlich eine Selbstverständlichkeit, da du nicht von JS ausgehen kanst.

    Struppi.

    --
    Javascript ist toll (Perl auch!)