Javascript Funktion abhängig vom Doctype?

JamesT

Erfahrenes Mitglied
Hallo,

habe bei einem Javascript scroller festgestellt das er mit dem Doctype:

HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

nicht funktioniert. Ich nehme an das dort bestimmte stellen im code nicht so sind wie sie für
diesen Doctype sein sollen. Ich habe beispielsweise an dieser Stelle:

Code:
//scroller width: change to your own;
var swidth=180;
//scroller height: change to your own;
var sheight=68;

hinter den Werten "px" eingefügt, dann passen zumindest schonmal die abmessungen.

Da das script aber immernoch nicht funktioniert, hoffe ich ihr könnt mir tipps geben was ich noch abändern muss, damit ich den doctype nutzen kann.

Hier ist der Javascript code aus dem head:

Code:
<SCRIPT LANGUAGE="JavaScript">
//scroller width: change to your own;
var swidth=180px;
//scroller height: change to your own;
var sheight=68px;
//scroller's speed: change to your own;
var sspeed=2;
var restart=sspeed;
rspeed=sspeed;
//text: change to your own
wholemessage='<?PHP echo $scrolltext; ?>';
//-- end Parameters and message -->
//-- begin: Scroller's Algorithm -->
function goup(){if(sspeed!=rspeed*8){sspeed=sspeed*2;restart=sspeed;}}
function godown(){if(sspeed>rspeed){sspeed=sspeed/2;restart=sspeed;}}
function start(){if(document.all) iemarquee(slider);else if(document.getElementById)ns6marquee(document.getElementById('slider'));else if(document.layers)ns4marquee(document.slider1.document.slider2);}function iemarquee(whichdiv){iediv=eval(whichdiv);iediv.style.pixelTop=sheight;iediv.innerHTML=wholemessage;sizeup=iediv.offsetHeight;ieslide();}function ieslide(){if(iediv.style.pixelTop>=sizeup*(-1)){iediv.style.pixelTop-=sspeed;setTimeout("ieslide()",100);}else{iediv.style.pixelTop=sheight;ieslide();}}function ns4marquee(whichlayer){ns4layer=eval(whichlayer);ns4layer.top=sheight;ns4layer.document.write(wholemessage);ns4layer.document.close();sizeup=ns4layer.document.height;ns4slide();}function ns4slide(){if(ns4layer.top>=sizeup*(-1)){ns4layer.top-=sspeed;setTimeout("ns4slide()",100);}else{ns4layer.top=sheight;ns4slide();}}function ns6marquee(whichdiv){ns6div=eval(whichdiv);ns6div.style.top=sheight;ns6div.innerHTML=wholemessage;sizeup=ns6div.offsetHeight;ns6slide();}function ns6slide(){if(parseInt(ns6div.style.top)>=sizeup*(-1)){ns6div.style.top=parseInt(ns6div.style.top)-sspeed;setTimeout("ns6slide()",100);}else{ns6div.style.top=sheight;ns6slide();}}
//-- end Algorithm -->
</script>

Und das ist an der Stelle im Quellcode wo der Scroller angezeigt werden soll:

Code:
<script language="JavaScript">
document.write('<table border="0"><tr><td width='120' align="right">');
if (document.getElementById || document.all){
	document.write('<span style="height:'+sheight+';"><div style="position:relative;overflow:hidden;width:'+swidth+';height:'+sheight+';clip:rect(0 '+swidth+' '+sheight+' 0);" onMouseover="sspeed=0;" onMouseout="sspeed=restart"><div align="right" id="slider" style="position:relative;width:'+swidth+';"></div></div></span>')
}
</script>
<ilayer width=&{swidth}; height=&{sheight}; name="slider1" bgcolor=&{sbcolor};>
<layer name="slider2" width=&{swidth}; onMouseover="sspeed=0;" onMouseout="sspeed=restart"></layer></ilayer>
</td>
</tr></table>

Habt ihr noch nen Tipp für mich?

Grüße

Jamest
 
Hi
also erstens, im head steht bei dir
HTML:
<SCRIPT LANGUAGE="JavaScript">
...
HTML-Tags sollten klein geschrieben werden! (siehe noch weiter unten.)


Weiters, zwei Beispiele, die mit xhtml funktionieren (in meinen Arbeiten):

1. External:
HTML:
<script language="JavaScript" type="text/javascript" src="external.js"></script>
language ist deprecated, kann/soll fuer alte Browser aber da stehen.
type ist (wenn ich mich nicht ganz arg irre) zwingend!


2. Inline:
HTML:
<script (optional: language="JavaScript") type="text/javascript">
//<![CDATA[
  // dein code hier:
  alert ("<This is compatible with XHTML>");  // oder so
//]]>
</script>
<noscript>
// das wegzulassen, solltest dir gut ueberlegen!
</noscript>

oder aber:
HTML:
<script (optional: language="JavaScript") type="text/javascript">
/* <![CDATA[ */
  // dein code hier:
  $("myText").setHTML("<p>Hallo</p>"); // oder wie auch immer
/* ]]> */
</script>
<noscript>
// ...
</noscript>

Die Konstrukte '<![CDATA[' und ']]>' sind vor allem fuer XML-Parser wichtig.
Fuer weitere Studien gehe bitte zu ''w3c', 'zeldman.com' und related homepages ;o)

Beweisfuehrung:
auf der gerade aktuellen Zeldman-Seite (am Ende zu) steht das hier:

HTML:
<script type="text/javascript">
//<![CDATA[
(function(id) {
  document.write('<script type="text/javascript" src="' +
    'http://www.northmay.com/deck/deck' + id + '_js.php?' +
    (new Date().getTime()) + '"></' + 'script>');
})("JZ");
//]]>
</script>

und das funktioniert bei ihm!


lg
josephb


Ps.:
hast du deine Seite schon validiert? (Ist aber auch keine Pille gegen Schnupfen UND Plattfuss!)
(
W3C,
schneegans.de,
Validom.org
&co.
)
dann koenntest du den/die Fehler/n genauer einkreisen.
 
Habe mir nicht alles durchgelesen, das mal vorweg.
Folgendes ist allerdings auf jeden Fall Müll und kann gar nicht funktionieren:
HTML:
<SCRIPT LANGUAGE="JavaScript">
//scroller width: change to your own;
var swidth=180px;
//scroller height: change to your own;
var sheight=68px;
...etc....
</SCRIPT>
So gibt dar unter Garantie einen Fehler, weil javascript das "px" als eine Variable interpretiert, die aber mit den "180" bzw. "68" davor durch keinen Operator verknüpft wird. Wenn muss es heißen:
HTML:
<script type="text/javascript">
//scroller width: change to your own;
var swidth=180+"px";
//scroller height: change to your own;
var sheight=68+"px";
...etc....
</script>
Allgemein musst du bei den strengeren Documenttypen in Javascripts immer bei Styleeigenschaften eine Einheit mit angeben. Umgekehrt gibt dir Javascript bei den strengeren Documenttypen auch immer eine Einheit zurück.
Im Quirksmode würde also "alert(obj.style.top);" nur "10" ausgeben, während bei XHTML 1.1 strict "10px" die Antwort wäre.
Umgekehrt nimmt es dir aber der Quirksmode nicht übel, wenn du Einheiten reinschreibst.
Daher die Faustregel immer Einheiten, dann geht's mit jedem Doctype.

Ansonsten kann ich mich meinem Vorredner nur anschließen, auch wenn er es etwas breit getreten und dir vielleicht zu sehr unter die Nase gerieben hat. Trotzdem solltest du dich, bevor du einfach einen Doctype reinschreibst vergewissen, dass du auch Ahnung von den Vorschriften dieses Doctypes hast und solltest es immer durch den Validator jagen. Sonst richtest du mehr Schaden an, als es nützt.

P.S.
Groß geschriebene Tags sind ein Alptraum.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück