5thElement: Javascript funktioniert nicht mit Doctype

Hallo zusammen

Ich hab auf einer Webseite einen Javascript Code gefunden. Erst funktionierte alles prächtig, doch jetzt wird das Script nur noch ausgeführt, wenn ich den Doctype weglasse.. Wie kann das sein??

Grüsse
5thElement

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">  
<html>  
<head>  
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">  
<title>Multimedia</title>  
<link href="styles.css" rel="stylesheet" type="text/css">  
  
<SCRIPT type="text/javascript" LANGUAGE="JavaScript" >  
<!--  
function validate_form() {  
  validity = true;  
  if (!check_empty(document.form.NAME.value)){ 			/* Funktion Namen (Abfrage) */  
	validity = false;  
	show('Layer1');show('Layer2');				/* zeige Fehler */  
	}  
  if (!check_email(document.form.EMAIL.value)){ 		/* Funktion EMail (Abfrage) */  
	validity = false;  
	show('Layer1');show('Layer3'); 				/* zeige Fehler */  
	}  
  if (!check_url(document.form.URL.value)){ 			/* Funktion URL (Abfrage) */  
	validity = false;  
	show('Layer1');show('Layer4'); 				/* zeige Fehler */  
	}  
  if (!check_empty(document.form.DESCRIPTION.value)){ 		/* Funktion Comment (Abfrage) */  
	validity = false;  
	show('Layer1');show('Layer5'); 				/* zeige Fehler */  
	}  
  if (validity);  
  	return validity;					/* alle Angaben waren korrekt */  
}  
function check_empty(text) {  
  	return (text.length > 0); 				/* gibt false zurück wenn leer */  
}  
function check_email(address) {					/* Email muss (@ und .) enthalten */  
  if ((address == "") || (address.indexOf ('@') == -1) || (address.indexOf ('.') == -1))  
      	return false;  
  	return true;  
  
}  
function check_url(address) {					/* URL muss (http:// und .) enthalten */  
  if ((address == "") || (address.indexOf ('') == -1) || (address.indexOf ('') == -1))  
      	return false;  
	return true;  
}  
if (((navigator.appName == "Netscape") && (parseInt(navigator.appVersion.substring(0,1)) >=3))  
   || ((navigator.appName == "Microsoft Internet  Explorer") && (parseInt(navigator.appVersion.substring(0,1)) >=4)))  
  
{var version=true}  
  
if (document.layers){						/* Browserabfrage: Layer-Object bekannt? */  
	ns = 1; ie = 0;  
   }else{  
	ns = 0; ie = 1;  
}  
function show(name) {if (ns){					/* Funktion Schicht anzeigen */  
document.layers['' + name].visibility = "show";  
}else{  
document.all['' + name].style.visibility = "visible";  
	}  
}  
function hide(name) {						/* Funktion Schicht verstecken */  
if (ns){  
document.layers['' + name].visibility = "hide";  
}else{  
document.all['' + name].style.visibility = "hidden";  
	}  
}  
// -->  
</SCRIPT>
  1. @@5thElement:

    nuqneH

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">

    Es gibt in HTML 4.01 kein @xmlns.

    if (((navigator.appName == "Netscape") && (parseInt(navigator.appVersion.substring(0,1)) >=3))
       || ((navigator.appName == "Microsoft Internet  Explorer") && (parseInt(navigator.appVersion.substring(0,1)) >=4)))

    Frage einen Browser nie nach seinem Namen, sondern ggfs. nach seinen Fähigkeiten!

    Wofür denkst du, eine Browserweiche zu benötigen?

    Qapla'

    --
    Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
    1. Hallo Liebe,

      desweiteren sollte folgendes zu einem Fehler führen:

      <SCRIPT type="text/javascript" LANGUAGE="JavaScript" >
      <!--

      Notiere stattdessen:

      <SCRIPT type="text/javascript" LANGUAGE="JavaScript" >
      //<!--

      Gruß aus Berlin!
      eddi

      --
      Wenn der Weg zur Hölle mit guten Vorsätzen gepflastert ist, wäre der zum Himmel aus bösen Absichten betoniert. Was aber ist dann ein Weg voller Irrtümer?
      Wer weiß - vielleicht der Mittelweg. ;)
      1. vielen Dank schonmal ihre lieben :)
        für was ich die Browserabfrage brauche weiss ich grad auch nicht. Warscheinlich gabs da früher mal ein Problem mit dem (Layer) raufzählen. Wenn ichs lösche funktionierts jedoch gar nichtmehr.

        Ich habe die Vorschäge angepasst, leider funktionierts noch immer nicht mit dem Doctype..

        <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
        <html>  
        <head>  
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">  
        <title>Multimedia-Communication.ch</title>  
        <link href="styles.css" rel="stylesheet" type="text/css">
        
          
        <SCRIPT type="text/javascript" LANGUAGE="JavaScript" >  
        //<!--  
        function validate_form() {  
          validity = true;  
          if (!check_empty(document.form.NAME.value)){ 			/* Funktion Namen (Abfrage) */  
        	validity = false;  
        	show('Layer1');show('Layer2');				/* zeige Fehler */  
        	}  
          if (!check_email(document.form.EMAIL.value)){ 		/* Funktion EMail (Abfrage) */  
        	validity = false;  
        	show('Layer1');show('Layer3'); 				/* zeige Fehler */  
        	}  
          if (!check_empty(document.form.DESCRIPTION.value)){ 		/* Funktion Comment (Abfrage) */  
        	validity = false;  
        	show('Layer1');show('Layer5'); 				/* zeige Fehler */  
        	}  
          if (validity);  
          	return validity;					/* alle Angaben waren korrekt */  
        }  
        function check_empty(text) {  
          	return (text.length > 0); 				/* gibt false zurück wenn leer */  
        }  
        function check_email(address) {					/* Email muss (@ und .) enthalten */  
          if ((address == "") || (address.indexOf ('@') == -1) || (address.indexOf ('.') == -1))  
              	return false;  
          	return true;  
          
        }  
         if (((navigator.appName == "Netscape") && (parseInt(navigator.appVersion.substring(0,1)) >=3))  
           || ((navigator.appName == "Microsoft Internet  Explorer") && (parseInt(navigator.appVersion.substring(0,1)) >=4)))  
          
        {var version=true}  
          
        if (document.layers){						/* Browserabfrage: Layer-Object bekannt? */  
        	ns = 1; ie = 0;  
           }else{  
        	ns = 0; ie = 1;  
        }  
          
        function show(name) {if (ns){					/* Funktion Schicht anzeigen */  
        document.layers['' + name].visibility = "show";  
        }else{  
        document.all['' + name].style.visibility = "visible";  
        	}  
        }  
        function hide(name) {						/* Funktion Schicht verstecken */  
        if (ns){  
        document.layers['' + name].visibility = "hide";  
        }else{  
        document.all['' + name].style.visibility = "hidden";  
        	}  
        }  
        // -->  
        </SCRIPT>  
        
        
        1. @vinzenz wie kann ich das denn besser machen?
          Der Code überprüft ein Formular und gibt wenn nötig eine Fehlermeldung in einem Div-Layer aus.

          1. Hallo,

            @vinzenz wie kann ich das denn besser machen?

            Du darfst gern auf meinen Beitrag antworten :-)

            Der Code überprüft ein Formular und gibt wenn nötig eine Fehlermeldung in einem Div-Layer aus.

            gehe als erstes davon aus, dass es sich nicht lohnt, für die Benutzer von IE 4 oder Netscape 4 eine Extrawurst zu braten :-)

            Deine clientseitige Prüfung kann sich somit auf ein Verfahren zum Ein- und Ausblenden beschränken, dass so ziemlich alle javascript-tauglichen Browser, die in diesem Jahrtausend veröffentlicht wurden, beherrschen:

            Ermittle Dein einzublendendes DIV-Element über seine ID: getElementById()

            Einblenden: setze die display-Eigenschaft des http://de.selfhtml.org/javascript/objekte/style.htm@title=style-Objektes dieses Elementes auf den Wert block. [*]
            Ausblenden: setze die display-Eigenschaft des style-Objektes dieses Elementes auf den Wert none.

            Wie das geht, steht zum Beispiel in diesem Archivbeitrag von Gunnar.

            Freundliche Grüße

            Vinzenz

            [*] und bitte keine veraltete proprietäre Microsoft-Syntax mehr verwenden, die im verlinkten Abschnitt zu allem Überfluss noch als erstes aufgeführt wird.

            1. Das Ding war tatsächlich so vermurkst, weil einfach zu alt.
              Hab ein neues gefunden und an meine Bedürfnisse angepasst.
              Es schreibt nun ALLE Fehlermeldungen in ein Div.

              Vielleicht findet sonnst jemand diesen Beitrag, weshalb ich ihn hier poste:

                
              <SCRIPT type="text/javascript" LANGUAGE="JavaScript" >  
              function checkForm() {  
                var strFehler='';  
                if (document.forms[0].Name.value.length<2)  
                  strFehler += "Bitte Namen eingeben!<br>\n";  
                if (!validEmail(document.forms[0].Email.value)) {  
                  strFehler += "E-Mailadresse nicht korrekt!<br>\n";  
                if (document.forms[0].Nachricht.value=="")  
                  strFehler += "Bitte Nachricht eingeben!\n";  
                }  
                
                if (strFehler.length>0) {  
              	document.getElementById('output').innerHTML = "Fehler:<br>\n" + strFehler;  
                
                  return(false);  
                }  
              }  
              function validEmail(email) {  
                var strReg = "^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$";  
                var regex = new RegExp(strReg);  
                return(regex.test(email));  
              }  
              </script>  
              
              

              Und das Formular:

                
                          <form name="form" method="post" action="contact.php" enctype="text/plain" onSubmit="return checkForm(this.form)">  
                          Name<br>  
                          <input type="text" size=40 name="Name" Id="Name"><br>  
                          <br>Email<br>  
                          <input type="text" size=40 name="Email" id="Email"><br>  
                          <br>URL<br>  
                          <input type="text" size=40 name="Url" id="Url"><br>  
                          <br>Interessiert an  
                          <input name="webseite" type="checkbox" value="">Webseite<br>  
                          <input name="webseite" type="checkbox" value="">Videofilm<br>  
                          <input name="webseite" type="checkbox" value="">Design<br>  
                          <input name="webseite" type="checkbox" value="">Job<br>  
                          <input name="webseite" type="checkbox" value="">Kooperation<br>  
                          <input name="webseite" type="checkbox" value="">Anderes<br>  
                          Nachricht<br>  
                          <TEXTAREA NAME="Nachricht" id="Nachricht" ROWS=4 COLS=40></TEXTAREA><br>  
                          <br><br>  
                          <input type="submit" id="absenden" onClick="hide('Layer1');hide('Layer2');hide('Layer3');hide('Layer4')" name="submit" value="Abenden"></form>  
              
              

              hat jemand noch eine Idee wie man ein Formular Zweispaltig machen kann?
              <DIV> in einem <Form> ist nach W3C ja nicht erlaubt..

              Grüsse und Danke für die Hilfe!
              5thElement

              1. Hallo,

                hat jemand noch eine Idee wie man ein Formular Zweispaltig machen kann?
                <DIV> in einem <Form> ist nach W3C ja nicht erlaubt..

                wie kommst du denn darauf? Natürlich ist das erlaubt.
                Nicht erlaubt ist dagegen je nach DOCTYPE das, was du da machst - nämlich Text (oder andere Inline-Inhalte) direkt ohne ein umgebendes Blockelement wie div oder p oder fieldset in ein Formular zu schreiben. In einem Transitional-DOCTYPE ist das erlaubt, in Strict nicht.

                Ciao,
                 Martin

                --
                Noch Fragen? - Ich weiß es auch nicht.
                1. Nicht erlaubt ist dagegen je nach DOCTYPE das, was du da machst - nämlich Text (oder andere Inline-Inhalte) direkt ohne ein umgebendes Blockelement wie div oder p oder fieldset in ein Formular zu schreiben. In einem Transitional-DOCTYPE ist das erlaubt, in Strict nicht.

                  und ist das sehr schlimm / unprofessionel ohne umgebende Blockelemente zu arbeiten? Transitional-Doctype ist doch völlig in Ordnung, nicht?

                  Das "Problem", welches mich am <p> etc hinderst ist, dass jedesmal ein Absatz generiert wird.

                  1. und ist das sehr schlimm / unprofessionel ohne umgebende Blockelemente zu arbeiten?

                    Nicht zwangsläufig. In dem Fall deines Formulars ist es schlimm, weil du mit <br>s eine Suppe zusammengerührt hast, anstatt das Formular semantisch auszuzeichnen und mit CSS zu formatieren.

                    Das "Problem", welches mich am <p> etc hinderst ist, dass jedesmal ein Absatz generiert wird.

                    Wahrscheinlich willst du manche Label-Feld-Einheiten nebeneinander anstatt untereinander darstellen. Das ist kein Problem, dafür kannst du dir ein allgemeines Markup-Modell ausdenken und die Mehrspaltigkeit mit CSS umsetzen.

                    <form>
                       <p>
                          <label for="kontakt-name">Name</label>
                          <input type="text" name="Name" id="kontakt-name"><br>
                       </p>
                       <p>
                          <label for="kontakt-email">Email</label>
                          <input type="text" size=40 name="Email" id="kontakt-email">
                       </p>
                       ... usw.
                    </form>

                    Wenn du hier nun beide Einheiten nebeneinander darstellen willst, umschließt du z.B. beide p-Elemente mit einem div-Element. Dem gibst du eine Klasse, lässtbeide p-Elemente darin links floaten und wendest einen Clearfix, um sie einzuschließen.

                    Auch die label-Elemente sind unterschiedlich formatierbar. Standardmäßig werden sie als Inline-Boxen angezeigt, mit display:block kann man jedoch Block-Boxen daraus machen. (Es gibt noch weitere Möglichkeiten wie display:inline-block.)

                    Mathias

      2. @@Edgar Ehritt:

        nuqneH

        desweiteren sollte folgendes zu einem Fehler führen:

        <SCRIPT type="text/javascript" LANGUAGE="JavaScript" >
        <!--

        In welchem Browser?

        Zu "<!--" und "-->" und molilys Antwort

        Notiere stattdessen:

        <SCRIPT type="text/javascript" LANGUAGE="JavaScript" >
        //<!--

        Nein. Die Auskommentierung von JavaScript-Code ist genauso unsinnig wie das 'language'-Attribut.

        Notiere stattdessen:

        <script type="text/javascript">

        Qapla'

        --
        Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
        1. Hallo Gunnar,

          In welchem Browser?

          ist nicht mehr repräsentativ (5.0 und 5.5 (müsste ich lügen) des IE).

          molilys Antwort

          Mich mit molly moppen magst Du wohl?

          <SCRIPT type="text/javascript" LANGUAGE="JavaScript" >
          //<!--

          Nein. Die Auskommentierung von JavaScript-Code ist genauso unsinnig wie das 'language'-Attribut.

          $a=document.getElementsByTagName('script');  
          for(var $i=0;$i<$a.length;$i++){  
             if($a.item($i)..getAttribute('language')!="JavaScript1.2"){  
                // mach was  
             }  
          }
          

          Das nur als formales Argument, was Du schwer umbiegen können wirst. Aber warum hast Du diese Anmerkung nicht gleich in Deinem Post eingabaut?

          Gruß aus Berlin!
          eddi

          --
          Wenn der Weg zur Hölle mit guten Vorsätzen gepflastert ist, wäre der zum Himmel aus bösen Absichten betoniert. Was aber ist dann ein Weg voller Irrtümer?
          Wer weiß - vielleicht der Mittelweg. ;)
          1. Hi,

            Das nur als formales Argument, was Du schwer umbiegen können wirst.

            warum sollte er auch? Was für ein Use-Case soll das sein, den Du da behandelst - außer mit veraltetem Code trotzdem irgendwas Nützliches zu machen? Das Argument lautet, keinen weiteren veralteten Code mehr zu schreiben; Dein JavaScript-Beispiel erfüllt hierbei keinen Zweck und kann somit auch nicht als Argument dienen.

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
            1. Hallo Cheatah,

              Das Argument lautet, keinen weiteren veralteten Code mehr zu schreiben; ...

              gut, als argumentlose Parole akzeptiert.

              Gruß aus Berlin!
              eddi

              --
              Wenn der Weg zur Hölle mit guten Vorsätzen gepflastert ist, wäre der zum Himmel aus bösen Absichten betoniert. Was aber ist dann ein Weg voller Irrtümer?
              Wer weiß - vielleicht der Mittelweg. ;)
          2. In welchem Browser?

            ist nicht mehr repräsentativ (5.0 und 5.5 (müsste ich lügen) des IE).

            Sowohl IE 5.0 als auch IE 5.5 verstehen in meinen Tests (IETester bzw. MultipleIEs) die Variante ohne Auskommentierung des <!--.

            Mathias

            1. Hallo erstmal!

              Sowohl IE 5.0 als auch IE 5.5 verstehen in meinen Tests (IETester bzw. MultipleIEs) die Variante ohne Auskommentierung des <!--.

              5.5 habe ich zugunsten von 6.0 nicht mehr, 5.0 signalisiert bei mir unten links einen Fehler.

              Gruß aus Berlin!
              eddi

              --
              Wenn der Weg zur Hölle mit guten Vorsätzen gepflastert ist, wäre der zum Himmel aus bösen Absichten betoniert. Was aber ist dann ein Weg voller Irrtümer?
              Wer weiß - vielleicht der Mittelweg. ;)
              1. 5.5 habe ich zugunsten von 6.0 nicht mehr, 5.0 signalisiert bei mir unten links einen Fehler.

                Was sagt die Fehlermeldung?

                <!DOCTYPE html>  
                <html><head><title>Test</title>  
                <script type="text/javascript" language="javascript">  
                <!--  
                alert("hallo");  
                //-->  
                </script>  
                </head>  
                <body></body></html>
                

                IE 5.01 von MultipleIE unter Windows XP: Kein Fehler wird angezeigt, alert funktioniert.
                Ich weiß leider nicht, wie ich einen nativen IE 5.x auftreiben kann.

                Obige Schreibweise ist meines Wissens Standard seit JavaScript 1.0 (alte Hasen mögen mich korrigieren). Jeder JavaScript-fähige Browser sollte das können. SELFHTML hat diese Schreibweise seit 1996 empfohlen und es traten m.W. nie Kompatibilitätsprobleme auf:

                http://aktuell.de.selfhtml.org/archiv/doku/5.0/jscript.htm
                http://aktuell.de.selfhtml.org/archiv/doku/6.0/tda.htm#a2
                http://aktuell.de.selfhtml.org/archiv/doku/7.0/tea.htm#a4
                http://aktuell.de.selfhtml.org/archiv/doku/8.0/javascript/intro.htm#javascriptbereiche

                Als ich im Jahr 2004 an SELFHTML 8.1 gearbeitet habe und diesen Abschnitt überarbeitet habe (die Auskommentierung flog heraus), habe ich diesen Abschnitt umgeschrieben und extensive Tests gemacht. Dabei ist mir kein JavaScript-fähiger Browser aufgefallen, der <!-- nicht versteht.

                Schon der JavaScript Guide for JavaScript 1.1 von 1997 empfiehlt <!--:
                http://web.archive.org/web/20000815210026/home.netscape.com/eng/mozilla/3.0/handbook/javascript/getstart.htm
                Die späteren Guides für JavaScript 1.3 und 1.5 von Netscape ebenso.

                Daher kann ich mir nicht so recht vorstellen, dass gerade der IE 5.0 damit Probleme haben sollte.

                Mathias

                1. Hallo Mathias,

                  IE 5.01 von MultipleIE unter Windows XP: Kein Fehler wird angezeigt, alert funktioniert.
                  Ich weiß leider nicht, wie ich einen nativen IE 5.x auftreiben kann.

                  VM mit Windows 2000. Übrigens berechtigt Dich so ziemlich jede neuere Windows-Version zum Downgrade, ansonsten dürftest Du Windows 2000 bei eBay für wenige Euro bekommen.

                  Dein Beispiel (ohne Auskommentierung) aus SELFHTML funktioniert im IE 5.0 wunderbar ohne Fehlermeldung.

                  Verwendet: Frisch installiertes Windows 2000 (Retailversion ohne Service Pack), mit IE 5.00.2920.0000 und folgenden Internetoptionen

                  [ ] Skriptdebugging deaktivieren
                  [x] Skriptfehler anzeigen

                  Freundliche Grüße

                  Vinzenz

  2. Hallo,

    Ich hab auf einer Webseite einen Javascript Code gefunden. Erst funktionierte alles prächtig, doch jetzt wird das Script nur noch ausgeführt, wenn ich den Doctype weglasse.. Wie kann das sein??

    dieser Javascript-Code, den Du gefunden hast, möchte *entweder* einen Netscape 4.x *oder* einen Internet-Explorer 4 (oder neuer) haben, was man an folgendem Code ablesen kann:

      
      
    if (document.layers){                        /* Browserabfrage: Layer-Object bekannt? */  
        ns = 1; ie = 0;  
       }else{  
        ns = 0; ie = 1;  
    }  
      
    
    > function hide(name) {						/* Funktion Schicht verstecken */  
    > if (ns){  
    > document.layers['' + name].visibility = "hide";  
    > }else{  
    > document.all['' + name].style.visibility = "hidden";  
    > 	}  
    > }  
    
    

    Dieser Code stammt daher aus der Zeit um die Jahrtausendwende. Es ist nicht besonders sinnvoll, sich noch mit solchem Uraltcode auseinanderzusetzen. In modernen Browsern (Firefox, Safari, Konqueror, Opera, ...) wird er eh' nichts tun.

    Freundliche Grüße

    Vinzenz