Javascript Fehler

Alice

Erfahrenes Mitglied
Hallo.

Ich habe hier einen kurzen JS-Code. Als ich eben meine Webseite mit dem W3C-Validator geprüft habe, hat mir dieser den JS-Code bemängelt.

Ich kann den Fehler selber nicht finden, denn der Code scheint ganz normal zu funktionieren.

Code:
<script language="JavaScript" type="text/javascript">

function hide_class() {
   document.documentElement.className += 'jshide';
}

window.onload = function() {
   hide_class();
}

function show_elements() {
   var elementNames = show_elements.arguments;
   for (var i=0; i < elementNames.length; i++) {
        var elementName = elementNames[i];
        document.getElementById(elementName).style.display='block';
   }
}

function hide_elements() {
   var elementNames = hide_elements.arguments;
   for (var i=0; i < elementNames.length; i++) {
        var elementName = elementNames[i];
        document.getElementById(elementName).style.display='none';
   }
}

</script>
 
Code:
<!-- ##### FEHLER 1 ##### -->
Line 174, Column 39: character ";" not allowed in attribute specification list

   for (var i=0; i<elementNames.length; i++) {

<!-- ##### FEHLER 2 ##### -->
Line 174, Column 39: element "elementNames.length" undefined

   for (var i=0; i<elementNames.length; i++) {

<!-- ##### FEHLER 3 ##### -->
Line 182, Column 39: character ";" not allowed in attribute specification list

   for (var i=0; i<elementNames.length; i++) {

<!-- ##### FEHLER 4 ##### -->
Line 182, Column 39: element "elementNames.length" undefined

   for (var i=0; i<elementNames.length; i++) {

<!-- ##### FEHLER 5 ##### -->
Line 188, Column 9: end tag for "elementNames.length" omitted, but OMITTAG NO was specified

</script>

<!-- ##### FEHLER 6 ##### -->
Line 182, Column 19: start tag was here

   for (var i=0; i<elementNames.length; i++) {

<!-- ##### FEHLER 7 ##### -->
Line 188, Column 9: end tag for "elementNames.length" omitted, but OMITTAG NO was specified

</script>

<!-- ##### FEHLER 8 ##### -->
Line 174, Column 19: start tag was here

   for (var i=0; i<elementNames.length; i++) {

Danke.
 
ok?

Code:
$stylevar[htmldoctype]
<html xmlns="http://www.w3.org/1999/xhtml" dir="$stylevar[textdirection]" lang="$stylevar[languagecode]"> 
<head>
$headinclude
<title>$vboptions[bbtitle]</title>



<style type="text/css">
.main {
   width: 462px;
   margin: 0 auto;
}
.container {
   padding-bottom:2px;
   margin:0;
}
.InputLMR {
   background: url(./bg.png);
   background-repeat:no-repeat;
   background-position: center center;
   margin:auto;
   width: 355px;
   height: 75px;
   color: #FFFFFF;
}
.kg-faq {
   width:462px;
}







.all{
float:left;
width:450px;
border:1px solid #D0D0D0;
background-color:#F6F6F6;
margin-bottom:5px;
padding:5px;
}

.one{
float:left;
width:215px;
margin-right:5px;
}

.two{
float:left;
width:213px;
margin-right:5px;
}

.three{
float:left;
width:185px;
margin-right:15px;
padding-bottom:5px;
}










#kg-faq{
width:462px;
}

.container2{
padding:3px;
margin:0;
background-color:#F6F6F6;
border:1px solid #D0D0D0;
white-space:normal;
}
.container3{
float:right;
}

#ninfos {
margin:auto;
text-align:center;
}
#kg-go {
margin:auto;
text-align:center;
}
#Input01 {
width: 64px;
height: 38px;
margin: 15px 28px 0px 38px;
font-size: 32px;
font-weight: bold;
color: #000000;
text-transform: none;
}
#Input02 {
width: 60px;
height: 38px;
margin: 15px 8px 0px 0px;
font-size: 32px;
font-weight: bold;
color: #000000;
text-transform: none;
}
#Input03 {
width: 115px;
height: 38px;
margin: 15px 0px 0px 0px;
font-size: 32px;
font-weight: bold;
color: #000000;
text-transform: none;
}
</style>
 
Der Template-Code ist es also nicht, kannst du den generierten auch zeigen?

Allerdings wundere ich mich über $stylevar ganz am Anfang, sollte nicht der Doctype das erste im Dokument sein (bis auf Kommentare)?
 
Ne ist schon so alles richtig.

Hier der Auszug aus dem Quelltext:
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="de"> 
<head>
<meta http-equiv="Page-Exit" content="BlendTrans(Duration=0)" />
<meta http-equiv="Page-Enter" content="BlendTrans(Duration=0)" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />


<meta name="keywords" content="XXX" />
<meta name="description" content="XXX" />
<meta name="robots" content="index,follow" />
<meta name="revisit-after" content="1 day" />
<meta http-equiv="Language" content="de" />
<meta name="Content-Language" content="de" />
<meta name="Language" content="German, de, deutsch" />

<style type="text/css" id="vbulletin_css">
@import url("clientscript/vbulletin_css/style-9de28014-00034.css");
</style>
<link rel="stylesheet" type="text/css" href="clientscript/vbulletin_important.css?v=385" />


<link type="text/css" rel="stylesheet" href="./gen-style.css" />
<script type="text/javascript" src="clientscript/yui/yahoo-dom-event/yahoo-dom-event.js?v=385"></script>
<script type="text/javascript" src="clientscript/yui/connection/connection-min.js?v=385"></script>
<script type="text/javascript">
<!--
var SESSIONURL = "";
var SECURITYTOKEN = "1335294335-add130982d0322750b80c820e9f36b423d782717";
var IMGDIR_MISC = "images/misc";
var vb_disable_ajax = parseInt("0", 10);
// -->
</script>
<script type="text/javascript" src="clientscript/vbulletin_global.js?v=385"></script>
<script type="text/javascript" src="clientscript/vbulletin_menu.js?v=385"></script>

<title>XXX</title>



<script type="text/javascript">

function hide_class() {
   document.documentElement.className += 'jshide';
}

window.onload = function() {
   hide_class();
}

function show_elements() {
   var elementNames = show_elements.arguments;
   for (var i=0; i<elementNames.length; i++) {
        var elementName = elementNames[i];
        document.getElementById(elementName).style.display='block';
   }
}

function hide_elements() {
   var elementNames = hide_elements.arguments;
   for (var i=0; i<elementNames.length; i++) {
        var elementName = elementNames[i];
        document.getElementById(elementName).style.display='none';
   }
}

</script>
 
Ich weiss zwar nicht wieso aber so geht es?

HTML:
<script type="text/javascript">
<!--
function hide_class() {
   document.documentElement.className += 'jshide';
}

window.onload = function() {
   hide_class();
}

function show_elements() {
   var elementNames = show_elements.arguments;
   for (var i=0; i<elementNames.length; i++) {
        var elementName = elementNames[i];
        document.getElementById(elementName).style.display='block';
   }
}

function hide_elements() {
   var elementNames = hide_elements.arguments;
   for (var i=0; i<elementNames.length; i++) {
        var elementName = elementNames[i];
        document.getElementById(elementName).style.display='none';
   }
}
//-->
</script>

Gibt es abgesehen vom W3C-Validator am Code selber auch etwas zu meckern?
 
Da du XHTML nutzt, musst du die <script>-Blöcke nur als CDATA kennzeichnen und der Validator gibt keine Fehler mehr:
HTML:
<script type="text/javascript">
<![CDATA[
/* Dein Code hier */
]]>
</script>
Somit kannst du völlig legitim die spitzen Klammern verwenden.


PS: Es liegt im Prinzip doch am Template-Code, nur ich habe dein Skript mit dem HTML5-Doctype getestet gehabt ;)
 
Soll ich nun

HTML:
<!--
/* Dein Code hier */
//-->

oder

HTML:
<![CDATA[
/* Dein Code hier */
]]>

verwenden?

Ist der Code an sich in Ordnung?
 

Neue Beiträge

Zurück