cross: Script wird total ignoriert (JS ist eingeschaltet)

Hallöchen auch,

ich habe ein Problem, bei dem ich möglicherweise den Wald vor lauter Bäumen nicht mehr sehe. Es ist ein Formluar, das durch javascript auf Gültigkeit der Eingaben überprüft werden soll. Aber leider wird beim Leerlassen erforderlicher Felder kein alert ausgegeben?! Überhaupt scheint das ganze JS irgendwie ignoriert zu werden. Selbst wenn ich JD-Fehler bewusst provozieren möchte, bspw. durch falsche Variablen, erscheint nicht mal ne Fehlermeldung im FF.

Ich muss dazu sagen, dass es bei dem Code um das default Joomla-Kontakt-Formular handelt, wo ich eine kleine Anti-Spam-Routine eingebaut habe. Ohne JS liefert das gehackte Script wie erwartet eine entsprechende Fehlermeldung.

Vielleicht seht Ihr ja mehr als ich. :-)

<td>

                   <script language="javascript" type="text/javascript">  
                    /*<![CDATA[*/  
                           function pruefeForm() {  
                            if (document.emailForm.email.value == "") {  
                             alert("Bitte geben Sie eine gueltige Emailadresse ein!");  
                             document.emailForm.email.focus();  
                             return false;  
                            }  
                            if (document.emailForm.Mail.value.indexOf("@") == -1) {  
                             alert("Dieses scheint keine gueltige E-Mail-Adresse zu sein!");  
                             document.emailForm.Mail.focus();  
                             return false;  
                            }  
                            if (document.emailForm.text.value == "") {  
                             alert("Moechten Sie keine Nachricht eingeben?");  
                             document.emailForm.text.focus();  
                             return false;  
                            }  
                            if (document.emailForm.spam.value != "") {  
                             alert("Bitte loeschen Sie den Text aus dem Feld\\n'Pr&uuml;fung gegen Spam-Roboter'");  
                             document.emailForm.spam.focus();  
                             return false;  
                            }  
                           }  
                    /*]]>*/  
                   </script>  

~~~~~~html
                   <form action="/index.php/kontakt" method="post" name="emailForm" id="emailForm" class="form-validate" onsubmit="return pruefeForm()">  
                    <div class="contact_email">  
  
                        <br />  
                        <label for="contact_name">  
                         Ihren Namen eingeben:  
                        </label>  
                        <br />  
                        <input type="text" name="name" id="contact_name" size="30" class="inputbox" value="" />  
                        <br />  
                        <label id="contact_emailmsg" for="contact_email">  
                         E-Mail-Adresse:  
                        </label>  
  
                        <br />  
                        <input type="text" id="contact_email" name="email" size="30" value="" class="inputbox required validate-email" maxlength="100" />  
                        <br />  
                        <label for="contact_subject">  
                         Betreff:  
                        </label>  
                        <br />  
                        <input type="text" name="subject" id="contact_subject" size="30" class="inputbox" value="" />  
                        <br />  
  
                        <label for="contact_spam">  
                         Pr&uuml;fung gegen Spam-Roboter:  
                        </label>  
                        <br />  
                        <input type="text" name="spam" id="contact_spam" size="30" class="inputbox" value="Bitte entfernen Sie diesen Text!" />  
                        <br /><br />  
                        <label id="contact_textmsg" for="contact_text">  
                         Ihre Nachricht eingeben:  
                        </label>  
  
                        <br />  
                        <textarea cols="50" rows="10" name="text" id="contact_text" class="inputbox required"></textarea>  
                         <br />  
                        <input type="checkbox" name="email_copy" id="contact_email_copy" value="1" style="vertical-align: middle;" />  
                        <label for="contact_email_copy">Eine Kopie dieser Nachricht an Ihre E-Mail-Adresse senden</label>  
                        <br />  
                        <br />  
                        <button class="button validate" type="submit">Senden</button>  
  
                    </div>  
                    <input type="hidden" name="option" value="com_contact" />  
                    <input type="hidden" name="view" value="contact" />  
                    <input type="hidden" name="id" value="2" />  
                    <input type="hidden" name="task" value="submit" />  
                    <input type="hidden" name="15482142957cdac6d84ee0017c2e1404" value="1" />  
                   </form>  
                   <br />  
                  </td>

Bin ich wirklich blind, oder liegt da was anderes vor?? :-)
Danke im voraus!

MfG
cross

p.s. Die URL möchte ich vorläufig noch nicht nennen, da die Seite noch nicht offiziell online ist.

  1. Selbst wenn ich JD-Fehler bewusst provozieren möchte, bspw. durch falsche Variablen, erscheint nicht mal ne Fehlermeldung im FF.

    Du weißt wo du diese Fehlermeldungen findest?

    Struppi.

  2. Hi,

    sowas "document.emailForm.text.value" nutzt Du?

    Wie wärs mit zb. mit:
    http://de.selfhtml.org/javascript/objekte/document.htm#get_element_by_id

    Pete

    1. sowas "document.emailForm.text.value" nutzt Du?

      spricht auch nichts dagegen bei Formularen.

      Wie wärs mit zb. mit:
      http://de.selfhtml.org/javascript/objekte/document.htm#get_element_by_id

      Dazu müßte das Element eine ID haben, was bei Formularelementen nicht nötig ist.

      Struppi.

      1. Hi,

        Dazu müßte das Element eine ID haben, was bei Formularelementen nicht nötig ist.

        Wusste ich nicht. Aber IDs hat er ja. Und ich hatte da so oft Probleme mit je nachdem wo das Script stand(Kopf oder Body), dass ich seitdem nur noch die ById oder ByName verwende.

        Aber sein Problem ist ja auch ein Anderes:

        Er muss das:
        if (document.emailForm.Mail.value.indexOf("@") == -1) {
        alert("Dieses scheint keine gueltige E-Mail-Adresse zu sein!");
        document.emailForm.Mail.focus();
        return false;
        }

        entfernen dann gehts, warum auch immer.

        Pete

        1. Hi,

          Er muss das:
          if (document.emailForm.Mail.value.indexOf("@") == -1) {
          alert("Dieses scheint keine gueltige E-Mail-Adresse zu sein!");
          document.emailForm.Mail.focus();
          return false;
          }

          entfernen dann gehts, warum auch immer.

          Ganz einfach deshalb, weil sein Formular kein Feld mit dem Namen Mail enthält.

          (So viel zum Thema es gibt keine Fehlermeldungen ...)

          MfG ChrisB

          --
          Light travels faster than sound - that's why most people appear bright until you hear them speak.
        2. Hallöchen auch,

          Wusste ich nicht. Aber IDs hat er ja. Und ich hatte da so oft Probleme mit je nachdem wo das Script stand(Kopf oder Body), dass ich seitdem nur noch die ById oder ByName verwende.

          Habe ich ebenfalls jetzt ausprobiert - klappt nicht. :/

          Aber sein Problem ist ja auch ein Anderes:

          Er muss das:
          if (document.emailForm.Mail.value.indexOf("@") == -1) {
          alert("Dieses scheint keine gueltige E-Mail-Adresse zu sein!");
          document.emailForm.Mail.focus();
          return false;
          }

          entfernen dann gehts, warum auch immer.

          Das Problem dabei war, dass es den Namen "Mail" nicht gibt.

          MfG
          cross

          1. » entfernen dann gehts, warum auch immer.
            Das Problem dabei war, dass es den Namen "Mail" nicht gibt.

            Du hast anscheinend meine Frage übersehen, denn das steht sicher auch in der Fehlerkonsole.

            Struppi.

          2. Hi,

            »» entfernen dann gehts, warum auch immer.
            Das Problem dabei war, dass es den Namen "Mail" nicht gibt.

            ja schon klar, nur verstehe ich nicht, warum das dann die ganze Prüfung ausser Kraft setzt?

            Pete

            1. Hallöchen auch,

              ja schon klar, nur verstehe ich nicht, warum das dann die ganze Prüfung ausser Kraft setzt?

              Das verstehe ich ja auch nicht. Durch einige Tests ist jetzt zumindest klar, dass eine Funktion in dem validate.js dafür verantwortlich ist. Es ist es daran herauszuffinden, was dieses Verhalten verursacht.

              MfG
              cross

  3. Hi,

    function pruefeForm() {
                                if (document.emailForm.email.value == "") {
                                 alert("Bitte geben Sie eine gueltige Emailadresse ein!");
                                 document.emailForm.email.focus();
                                 return false;
                                }
                                if (document.emailForm.Mail.value.indexOf("@") == -1) {

    so ein Feld gibt's im Formular nicht.

    [...]
                                if (document.emailForm.spam.value != "") {
                                 alert("Bitte loeschen Sie den Text aus dem Feld\n'Pr&uuml;fung gegen Spam-Roboter'");

    Willst Du hier wirklich \ stehen haben? Und auch wirklich &uuml; ? Was spricht gegen ganz normale Umlaute?

    document.emailForm.spam.focus();
                                 return false;
                                }
                               }

    Was gibt Deine Funktion zurück, wenn keine der Prüfungen zuschlägt?

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Guten morgen zusammen, hallo Andreas,

      in Vertretung der anderen Beiträge, antworte ich jetzt der Einfachheit an dieser Stelle:

      »»                             if (document.emailForm.Mail.value.indexOf("@") == -1) {

      so ein Feld gibt's im Formular nicht.

      Ich schrieb ja, dass ich bewusst falsche Variablen in das Script eingebaut habe und eigentlich eine dementsprechende Fehlermeldung geliefert erwarte. Wundersamer Weise erscheint aber keine Fehlermeldung. Natürlich kenne ich die Stelle, an dem FF die Meldungen, Warnungen und Fehler ausgibt. ;)

      »»                             if (document.emailForm.spam.value != "") {
      »»                              alert("Bitte loeschen Sie den Text aus dem Feld\n'Pr&uuml;fung gegen Spam-Roboter'");

      Willst Du hier wirklich \ stehen haben? Und auch wirklich &uuml; ? Was spricht gegen ganz normale Umlaute?

      Gegen Umlaute spricht nichts, das war ein weitere Versuch das Script ans Rennen zu bringen. Habe nur vergessen, dieses wieder zu ändern. Das \n ist gewollt und bedeutet, dass in dem Alert-Fernster ein Zeilenumbruch nach dem Wort "Feld" erfolgt, wobei der 1. \ den 2. \ unescaped.

      »»                              document.emailForm.spam.focus();
      »»                              return false;
      »»                             }
      »»                            }

      Was gibt Deine Funktion zurück, wenn keine der Prüfungen zuschlägt?

      Offensichtlich nicht das erwartete false, denn das Form wird abgeschickt, belibt aber dann in der Affen-Formular-Funktion von PHP hängen. Ich erwarte jedoch bei eingeschaltetem JS, dass ein entsprechendes Alert erscheint und der Versandt erst gar nicht erfolgt.

      Ich kann mir eigentlich nur vorstellen, dass Joomla-Core oder ein anderes Plugin, Modul oder what ever dieses Verhalten verursacht und wir diesen Fehler nie finden werden, denn wie ich aus den anderen Beiträgen erahnen kann, wurde das Script wohl standalone getestet. Dort scheint es funktioniert zu haben, oder irre ich mich?

      MfG
      cross

      1. Ich schrieb ja, dass ich bewusst falsche Variablen in das Script eingebaut habe und eigentlich eine dementsprechende Fehlermeldung geliefert erwarte. Wundersamer Weise erscheint aber keine Fehlermeldung. Natürlich kenne ich die Stelle, an dem FF die Meldungen, Warnungen und Fehler ausgibt. ;)

        Das kann nicht sein, dann ist deine Firefox installation kaputt.

        Struppi.

        1. Hallöchen auch,

          Das kann nicht sein, dann ist deine Firefox installation kaputt.

          Also DAS glaube ich im Leben nicht! :))

          schaue selbst und staune

          Dann müssten mein Opera, Safari und der IE6 ebenfalls defekt sein. ;)

          MfG
          cross

          1. » Das kann nicht sein, dann ist deine Firefox installation kaputt.
            Also DAS glaube ich im Leben nicht! :))

            schaue selbst und staune

            Wo ist denn die von dir erwähnte falsche Variabel?

            Hast du mal statt des Buttons ein input Element probiert?

            Struppi.

            1. Hallöchen auch,

              Wo ist denn die von dir erwähnte falsche Variabel?

              Hat sich wohl überschnitten: Ich baue sie jetzt nochmal ein und warte auf Deine Reaktion.

              Hast du mal statt des Buttons ein input Element probiert?

              Soll das etwas bringen? Das Form wird ganz klar abgeschickt, also kann es daran eigentlich nicht liegen.

              Ich habe derweil diese "validate.js" aus dem header in Verdacht! Aber ich habe zu wenig Ahnung von JS, um zu analysieren was genau die macht. Jedenfalls prüft diese augenscheinlich alle Formulare und schreibt bei Fehlern das Style der betreffenden Felder in die Farbe Rot um.

              Also: ich baue jetzt den Fehler ein und warte ein paar Minuten ab bis Du Dich meldest.

              MfG
              cross

          2. Hi,

            schaue selbst und staune

            die beiden eingebundenen javascripte mootools.js und validate.js werden mit content-type text/x-js ausgeliefert - vielleicht bringt das ja den Firefox durcheinander.
            Wieso werden die nicht mit text/javascript ausgeliefert?

            cu,
            Andreas

            --
            Warum nennt sich Andreas hier MudGuard?
            O o ostern ...
            Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
            1. Hallöchen auch,

              die beiden eingebundenen javascripte mootools.js und validate.js werden mit content-type text/x-js ausgeliefert - vielleicht bringt das ja den Firefox durcheinander.
              Wieso werden die nicht mit text/javascript ausgeliefert?

              Gute Frage, nächste Frage. :)

              Wie gesagt, es handelt sich um Joomla 1.5.9 - Core. Das ist da so eingebaut. Irgendwas werden die sich dabei gedacht haben.

              Aber nicht nur FF zeigt keinen Fehler an - auch Opera, Safari und IE6 nicht.

              Mein Script wird schlicht und einfach ignoriert, als ob es gar nicht da wäre.

              MfG
              cross

              1. Hallo cross!

                Mein Script wird schlicht und einfach ignoriert, als ob es gar nicht da wäre.

                Wenn Du die beiden Skripten im Verdacht hast, nimm sie raus und teste ohne sie:

                document.GETELEMENTBYID is not a function

                Noch mal zum Alert mit dem escaped \n:

                alert("Bitte loeschen Sie den Text aus dem Feld\\n'Prüfung gegen Spam-Roboter'");

                gibt im Alert-Fenster aus:

                Bitte loeschen Sie den Text aus dem Feld\n'Prüfung gegen Spam-Roboter'
                                                           ^^

                Ist es so gewollt?

                language im script-Tag ist überflüssig und kann raus.

                Viele Grüße aus Frankfurt/Main,
                Patrick

                --
                _ - jenseits vom delirium - _

                   Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                J'ai 10 ans! | Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
                1. Hallo Patrick!

                  Wenn Du die beiden Skripten im Verdacht hast, nimm sie raus und teste ohne sie:

                  Habs mir jetzt leicht gemacht und die verdächtige Funktion im validate.js auskommentiert und siehe da: Plötzlich klappt es wie gewünscht. :))
                  Nur ist das jetzt nicht der Weisheit letzter Schluss. Jetzt muss ich erstmal rausklmüsern, was dieses Verhalten erzeugt.

                  Noch mal zum Alert mit dem escaped \n:

                  örks - natürlich hast Du recht. In diesem Fall ist das unescapen nicht nötig. :)

                  MfG
                  cross