Silke: Begrenzte Menge Funktionen im Head-Tag?

Ich habe folgenden Javascript-Teil in meiner HTML-Datei:

<!--
    function cursor(){
                      heute = new Date();
                      document.bericht.angdat.value = heute.getDate()+"."+heute.getMonth()+1+"."+heute.getFullYear();
                      document.bericht.prosdat.value = heute.getDate()+"."+heute.getMonth()+1+"."+heute.getFullYear();
                      document.bericht.infodat.value = heute.getDate()+"."+heute.getMonth()+1+"."+heute.getFullYear();
                      document.bericht.mustdat.value = heute.getDate()+"."+heute.getMonth()+1+"."+heute.getFullYear();
                      document.bericht.kdnr.focus();
                     }

function chkFormular(){
                           if(document.bericht.kdnr.value == "") {
                             alert ("Bitte Kundennummer eingeben!");
                             document.bericht.kdnr.focus();
                             return false;
                           }

if(document.bericht.NL.options[0].selected == true) {
                              alert ("Bitte Niederlassung auswählen!");
                              document.bericht.NL.focus();
                              return false;
                           }
                           if(document.bericht.name.value == "") {
                             alert ("Bitte Name eingeben!");
                             document.bericht.name.focus();
                             return false;
                           }
                           if(document.bericht.segm.options[0].selected == true) {
                             alert ("Bitte Segment auswählen!");
                             document.bericht.segm.focus();
                             return false;
                           }

}
    function changeBox(cbox){
                             box = eval(cbox);
                             box.checked = !box.checked;
                            }
    function goToURL(){
                       window.location = "hpcaditest.htm";
                      }
//-->

Jetzt wollte ich in function cursor eine Zahlenüberprüfung einbauen (bekannt aus selfhtml). Sobald ich das tue und teste, zeigt mir der Browser einen JavaScript-Fehler (Objekt wird erwartet) an und zwar in der Zeile, wo ich die Funktion cursor() aufrufe. Vorher hat das ohne Probleme geklappt und in dieser Zeile habe ich auch nichts geändert (<body onload="cursor();">).
Kann ich nur eine begrenzte Anzahl an Funktionen bzw. eine bestimmte Funktionsgröße in den Head schreiben?

  1. Moin!

    Ich habe folgenden Javascript-Teil in meiner HTML-Datei:

    <!--
        function cursor(){
                         }
        function chkFormular(){
                              }
        function changeBox(cbox){
                                }
        function goToURL(){
                          }
    //-->

    Kann ich nur eine begrenzte Anzahl an Funktionen bzw. eine bestimmte Funktionsgröße in den Head schreiben?

    Nö, das ist unbegrenzt möglich.

    Wenn da aber ein Javascript-Fehler gemeldet wird, dann ist da auch einer. Ganz sicher! ;)

    Da du aber nicht den Quelltext von deiner veränderten Funktion gepostet hast, kann man natürlich nicht sagen, wo der Fehler ist.

    - Sven Rautenberg

    1. Hab das ganze jetzt nochmal ausprobiert. Vielleicht war auch nur ein Schreibfehler drin (habs nämlich neu abgetippt). Auf jeden Fall funktioniert es jetzt!
      Danke für Eure Hilfe!
      Silke

  2. Hi Silke,

    Dein Problem liegt wohl in einem Scriptfehler, denn die Menge oder Anzahl der Javascripts im header ist unbegrenzt. Du kannst sie der besseren performance wegen aber in eine eigene js-Datei schreiben, die von Deiner HTML Datei aus aufgerufen wird. Das ist von Vorteil, wenn weitere HTML Dateien die gleichen Javascripts brauchen (die js-Datei muß dann nicht nochmal geladen werden, sondern wird aus dem Browsercache geliefert; die HTML Dateien werden um's Javascript kleiner)...

  3. Jetzt bringt er mir den Fehler schon wieder: Hab die Funktion mehrmals eingefügt für verschiedene Felder. Jetzt meckert er wieder rum, daß bei <body onload="cursor();"> ein Objekt erwartet wird. Dabei hab ich da gar nix gemacht, sondern nur in der function checkformular. Hilfe?!?

    function cursor(){
                          heute = new Date();
                          document.bericht.angdat.value = heute.getDate()+"."+heute.getMonth()+1+"."+heute.getFullYear();
                          document.bericht.prosdat.value = heute.getDate()+"."+heute.getMonth()+1+"."+heute.getFullYear();
                          document.bericht.infodat.value = heute.getDate()+"."+heute.getMonth()+1+"."+heute.getFullYear();
                          document.bericht.mustdat.value = heute.getDate()+"."+heute.getMonth()+1+"."+heute.getFullYear();
                          document.bericht.kdnr.focus();
                         }

    function chkFormular(){
                               if(document.bericht.kdnr.value == "") {
                                 alert ("Bitte Kundennummer eingeben!");
                                 document.bericht.kdnr.focus();
                                 return false;
                               }
                               var chkZ = 1;
                               for(i=0;i<document.bericht.kdnr.value.length;++i)
                                  if(document.bericht.kdnr.value.charAt(i) < "0" || document.bericht.kdnr.value.charAt(i) > "9") chkZ = -1;
                                  if(chkZ == -1) {
                                    alert("Bitte Zahl eingeben!");
                                    document.bericht.kdnr.focus();
                                    return false;
                                  }
                               if(document.bericht.NL.options[0].selected == true) {
                                  alert ("Bitte Niederlassung auswählen!");
                                  document.bericht.NL.focus();
                                  return false;
                               }
                               if(document.bericht.name.value == "") {
                                 alert ("Bitte Name eingeben!");
                                 document.bericht.name.focus();
                                 return false;
                               }
                               if(document.bericht.segm.options[0].selected == true) {
                                 alert ("Bitte Segment auswählen!");
                                 document.bericht.segm.focus();
                                 return false;
                               }
                               var chkZ = 1;
                               for(i=0;i<document.bericht.acryl.value.length;++i)
                                  if(document.bericht.acryl.value.charAt(i) < "0" || document.bericht.acryl.value.charAt(i) > "9") chkZ = -1;
                                  if(chkZ == -1) {
                                    alert("Bitte Zahl eingeben!");
                                    document.bericht.acryl.focus();
                                    return false;
                                  }
                               for(i=0;i<document.bericht.alu.value.length;++i)
                                  if(document.bericht.alu.value.charAt(i) < "0" || document.bericht.alu.value.charAt(i) > "9" chkZ = -1;
                                  if(chkZ == -1) {
                                    alert("Bitte Zahl eingeben!";
                                    document.bericht.alu.focus();
                                    return false;
                                  }
                              }

    1. Er zieht mir jetzt auch nicht mehr das Datum in das Feld, obwohl ich an der Funktion überhaupt nichts geändert habe!!!

    2. Hall Silke,

      probier das Ganze doch mal mit Netscape aus und dann gib 'javascript:' in die Adresszeile ein. Was kommt da für eine Fehlermeldung?

      Gruß Markus

      1. Hall Silke,

        probier das Ganze doch mal mit Netscape aus und dann gib 'javascript:' in die Adresszeile ein. Was kommt da für eine Fehlermeldung?

        Gruß Markus

        Ich hab hier leider kein Netscape. Firma benutzt nur IE :-(

        1. Hall Silke,

          probier das Ganze doch mal mit Netscape aus und dann gib 'javascript:' in die Adresszeile ein. Was kommt da für eine Fehlermeldung?

          Gruß Markus

          Ich hab hier leider kein Netscape. Firma benutzt nur IE :-(

          Ich gehe mal eine Wette ein:

          Wetten, du hast dein Javascript nicht richtig beendet!

          Der abschließende Kommentar muß so aussehen:

          // -->

          Und nicht so:

          -->

          Grund: "--" ist ein Operator, und der will ein Objekt haben. Mit dem Javascript-Kommentar "//" wird also der HTML-Kommentar vor Javascript versteckt.

          Könnte sein, daß ich die Wette gewinne. Ansonsten: Poste den GESAMTEN Quelltext. Wenn der Fehler im <BODY> auftaucht, dann müssen wir auch den Aufruf im <BODY>, und alles, was dazwischen liegt, und dahinter auch, kennen.

          Noch besser wäre ein Link. Dann muß man nicht erst den Texteditor anwerfen, die Datei speichern und im Browser laden, sondern sieht das Problem direkt.

          - Sven Rautenberg

          1. Habe das Skript richtig beendet. Leider kann ich Euch keinen Link schicken, da alles noch lokal gespeichert ist. Hier aber mal der gesamte Quelltext: <html> <head> <link rel="stylesheet" type="text/css" href="formate.css"> <script language="JavaScript" type="text/javascript"> <!--     function cursor(){                       heute = new Date();                       document.bericht.angdat.value = heute.getDate()+"."+heute.getMonth()+1+"."+heute.getFullYear();                       document.bericht.prosdat.value = heute.getDate()+"."+heute.getMonth()+1+"."+heute.getFullYear();                       document.bericht.infodat.value = heute.getDate()+"."+heute.getMonth()+1+"."+heute.getFullYear();                       document.bericht.mustdat.value = heute.getDate()+"."+heute.getMonth()+1+"."+heute.getFullYear();                       document.bericht.kdnr.focus();                      }

            function chkFormular(){                            if(document.bericht.kdnr.value == "") {                              alert ("Bitte Kundennummer eingeben!");                              document.bericht.kdnr.focus();                              return false;                            }                            var chkZ = 1;                            for(i=0;i<document.bericht.kdnr.value.length;++i)                               if(document.bericht.kdnr.value.charAt(i) < "0" || document.bericht.kdnr.value.charAt(i) > "9") chkZ = -1;                               if(chkZ == -1) {                                 alert("Bitte Zahl eingeben!");                                 document.bericht.kdnr.focus();                                 return false;                               }                            if(document.bericht.NL.options[0].selected == true) {                               alert ("Bitte Niederlassung auswählen!");                               document.bericht.NL.focus();                               return false;                            }                            if(document.bericht.name.value == "") {                              alert ("Bitte Name eingeben!");                              document.bericht.name.focus();                              return false;                            }                            if(document.bericht.segm.options[0].selected == true) {                              alert ("Bitte Segment auswählen!");                              document.bericht.segm.focus();                              return false;                            }                            var chkZ = 1;                            for(i=0;i<document.bericht.acryl.value.length;++i)                               if(document.bericht.acryl.value.charAt(i) < "0" || document.bericht.acryl.value.charAt(i) > "9") chkZ = -1;                               if(chkZ == -1) {                                 alert("Bitte Zahl eingeben!");                                 document.bericht.acryl.focus();                                 return false;                               }                            for(i=0;i<document.bericht.alu.value.length;++i)                               if(document.bericht.alu.value.charAt(i) < "0" || document.bericht.alu.value.charAt(i) > "9" chkZ = -1;                               if(chkZ == -1) {                                 alert("Bitte Zahl eingeben!";                                 document.bericht.alu.focus();                                 return false;                               }                           }     function changeBox(cbox){                              box = eval(cbox);                              box.checked = !box.checked;                             }     function goToURL(){                        window.location = "hpcaditest.htm";                       } //--> </script>

            </head>

            <body onload="cursor();">

            <p>Füllen Sie bitte alle Felder aus. Felder mit einem * sind Mußfelder.</p> <form><input type="button" Value="HILFE" ONCLICK="window.open('aussenhilfe.htm', 'Sample', 'directories=no,toolbar=yes,menubar=yes,scrollbars=yes,copyhistory=yes,width=635,height=260')"></form> <inut type="button" value="HILFE" onClick= <p><h3>Kundendaten</h3></p>

            <form action="cgi-bin/aussentest.pl" method="post" name="bericht" onSubmit="return chkFormular()">     <table>         <tr>             <td>Kundennummer:</td>             <td><input type="text" name="kdnr" size="10" ></td>             <td>Niederlassung:</td>         </tr>         <tr>             <td>Name:</td>             <td><input type="text" name="name" size="30"></td>             <td>Bezirk:</td>             <td><input type="text" name="bez" size="10"></td>         </tr>         <tr>             <td>Ansprechpartner:</td>             <td><input type="text" name="anspr" size="30"></td>             <td>AD-Tour:</td>             <td><input type="text" name="adt" size="10"></td>         </tr>         <tr>             <td>Straße/Nr:</td>             <td><input type="text" name="str" size="30"><input type="text" name="nr" size="4"></td>             <td>Branche/Tätigkeitsfeld</td>             <td><input type="text" name="bran" size="30"></td>         </tr>         <tr>             <td>PLZ:</td>             <td><input type="text" name="plz" size="6" maxlength="5"></td>             <td>Segment:</td>             <td><select name="segm">                 <option></option>                 <option>Leuchtt./Schilder</option>                 <option>.....</option>                 </select>              </td>         </tr> </table> <table>         <tr>             <td width="130">Acrylglas</td>             <td width="15"><input type="text" name="acryl" size="10"></td>             <td width="200">Eur</td>             <td width="150">Alu</td>             <td width="15"><input type="text" name="alu" size="10"></td>             <td>Eur</td>         </tr> </table> <p><input type="submit" value="Anlegen">     <input type="reset" value="alles verwerfen">     <input type="button" value="Zurück" onClick="goToURL()">     </p> </form> </body> </html>

            1. Habe das Skript richtig beendet. Leider kann ich Euch keinen Link schicken, da alles noch lokal gespeichert ist. Hier aber mal der gesamte Quelltext:

              Das ist gut. Korrekturen schreib ich direkt rein (sind dank des Highlightings ja schnell sichtbar):

              Zuerst: Die Angabe eines DOCTYPE ist unbedingt erforderlich, wenn man den Validator verwenden will (und das will man, um Fehler zu finden)!

              <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

              <html> <head>

              <title>Ein Titel</title><!-- Der Titel ist verpflichtend -->

              <link rel="stylesheet" type="text/css" href="formate.css"> <script language="JavaScript" type="text/javascript"> <!--     function cursor(){                       heute = new Date();                       document.bericht.angdat.value = heute.getDate()+"."+heute.getMonth()+1+"."+heute.getFullYear();                       document.bericht.prosdat.value = heute.getDate()+"."+heute.getMonth()+1+"."+heute.getFullYear();                       document.bericht.infodat.value = heute.getDate()+"."+heute.getMonth()+1+"."+heute.getFullYear();                       document.bericht.mustdat.value = heute.getDate()+"."+heute.getMonth()+1+"."+heute.getFullYear();                       document.bericht.kdnr.focus();                      }

              function chkFormular(){                            if(document.bericht.kdnr.value == "") {                              alert ("Bitte Kundennummer eingeben!");                              document.bericht.kdnr.focus();                              return false;                            }                            var chkZ = 1;                            for(i=0;i<document.bericht.kdnr.value.length;++i)                               if(document.bericht.kdnr.value.charAt(i) < "0" || document.bericht.kdnr.value.charAt(i) > "9") chkZ = -1;                               if(chkZ == -1) {                                 alert("Bitte Zahl eingeben!");                                 document.bericht.kdnr.focus();                                 return false;                               }                            if(document.bericht.NL.options[0].selected == true) {                               alert ("Bitte Niederlassung auswählen!");                               document.bericht.NL.focus();                               return false;                            }                            if(document.bericht.name.value == "") {                              alert ("Bitte Name eingeben!");                              document.bericht.name.focus();                              return false;                            }                            if(document.bericht.segm.options[0].selected == true) {                              alert ("Bitte Segment auswählen!");                              document.bericht.segm.focus();                              return false;                            }                            var chkZ = 1;                            for(i=0;i<document.bericht.acryl.value.length;++i)                               if(document.bericht.acryl.value.charAt(i) < "0" || document.bericht.acryl.value.charAt(i) > "9") chkZ = -1;                               if(chkZ == -1) {                                 alert("Bitte Zahl eingeben!");                                 document.bericht.acryl.focus();                                 return false;                               }                            for(i=0;i<document.bericht.alu.value.length;++i)

              if(document.bericht.alu.value.charAt(i) < "0" || document.bericht.alu.value.charAt(i) > "9") chkZ = -1; //Klammer zu fehlte

              if(chkZ == -1) {

              alert("Bitte Zahl eingeben!"); //Klammer zu fehlte

              document.bericht.alu.focus();                                 return false;                               }                           }     function changeBox(cbox){                              box = eval(cbox);                              box.checked = !box.checked;                             }     function goToURL(){                        window.location = "hpcaditest.htm";                       } //--> </script>

              </head>

              <body onload="cursor();">

              <p>Füllen Sie bitte alle Felder aus. Felder mit einem * sind Mußfelder.</p>

              <form action="irgendwas"><!-- action ist unbedingt erforderlich --> <input type="button" Value="HILFE" ONCLICK="window.open('aussenhilfe.htm', 'Sample', 'directories=no,toolbar=yes,menubar=yes,scrollbars=yes,copyhistory=yes,width=635,height=260')"></form> <!-- <inut type="button" value="HILFE" onClick= Merke: angefangenes HTML ist garnicht gut! --> <h3>Kundendaten</h3> <!-- Entweder <p> oder <h3>, aber nicht <h3> in <p> - das ist falsche Verschachtelung und wird angemeckert. -->

              <form action="cgi-bin/aussentest.pl" method="post" name="bericht" onSubmit="return chkFormular()">     <table>         <tr>             <td>Kundennummer:</td>             <td><input type="text" name="kdnr" size="10" ></td>             <td>Niederlassung:</td>         </tr>         <tr>             <td>Name:</td>             <td><input type="text" name="name" size="30"></td>             <td>Bezirk:</td>             <td><input type="text" name="bez" size="10"></td>         </tr>         <tr>             <td>Ansprechpartner:</td>             <td><input type="text" name="anspr" size="30"></td>             <td>AD-Tour:</td>             <td><input type="text" name="adt" size="10"></td>         </tr>         <tr>             <td>Straße/Nr:</td>             <td><input type="text" name="str" size="30"><input type="text" name="nr" size="4"></td>             <td>Branche/Tätigkeitsfeld</td>             <td><input type="text" name="bran" size="30"></td>         </tr>         <tr>             <td>PLZ:</td>             <td><input type="text" name="plz" size="6" maxlength="5"></td>             <td>Segment:</td>             <td><select name="segm">                 <option></option>                 <option>Leuchtt./Schilder</option>                 <option>.....</option>                 </select>              </td>         </tr> </table> <table>         <tr>             <td width="130">Acrylglas</td>             <td width="15"><input type="text" name="acryl" size="10"></td>             <td width="200">Eur</td>             <td width="150">Alu</td>             <td width="15"><input type="text" name="alu" size="10"></td>             <td>Eur</td>         </tr> </table> <p><input type="submit" value="Anlegen">     <input type="reset" value="alles verwerfen">     <input type="button" value="Zurück" onClick="goToURL()">     </p> </form> </body> </html>

              Das einzige Problem, was jetzt noch besteht: Du hast im Formular offenbar keine Felder definiert, die deine Funktion ansprechen könnte. Die mußt du dann noch mal anlegen.

              PS: Vorgehensweise bei Problemen sollte immer sein:

              1. Seite im Validator prüfen. Alle Fehler beseitigen. ALLE! Nur dann ist sichergestellt, daß der Browser erkennt, was du meinst - auch wenn er vorher schon auf den Bildschirm malt, was du meinst - das ist aber nicht das gleiche.

              2. Fehlermeldungen betrachten. Javascript wirft immer Fehlermeldungen raus - es ist deine Aufgabe, einen Browser mit den Einstellungen zu verwenden, der dir die Fehlermeldungen auch ordentlich anzeigt. Der IE ist da leider nicht wirklich brauchbar, Netscape (mit der Javascript-Konsole) oder Opera sind da besser.

              3. Fehlermeldungen der Reihe nach abarbeiten. ;)

              - Sven Rautenberg