Avatar billede mr_bula Nybegynder
21. oktober 2005 - 12:57 Der er 24 kommentarer og
2 løsninger

Fejl i script - img sluttegn ikke tilladt

Hejsa,
Sikkert et simpelt spørgsmål, men kan ikke løse fejlen her:

<script type="text/javascript">
var pics = ['billede1.jpg','billede2.jpg','billede3.jpg'];
document.write("<img src='" + pics[Math.floor(Math.random()*pics.length)] + "' border='none' alt='billede' />");
</script>

Det skal kunne validere i XHTML 1.0 Transitional, og det skal det bare. Ingen kommentar til det tak ;)
I overstående kode får jeg en fejl med at slut tegnet for img ikke er tilladt der ( /> ) hvor det står?
Avatar billede Slettet bruger
21. oktober 2005 - 13:01 #1
Det fordi validatoren ikke forstår JavaScript.
Avatar billede Slettet bruger
21. oktober 2005 - 13:02 #2
Noget andet er at du bør bruge " på dine attributter og ikke '

altså alt="" og ikke alt=''
Avatar billede fennec Nybegynder
21. oktober 2005 - 13:06 #3
Man kan snyde den. Det er vist sådan:
document.write("<img src='" + pics[Math.floor(Math.random()*pics.length)] + "' border='none' alt='billede' /"+">");

Eller sådan:
document.write("<img src='" + pics[Math.floor(Math.random()*pics.length)] + "' border='none' alt='billede' "+"/>");
Avatar billede mr_bula Nybegynder
21. oktober 2005 - 13:07 #4
Troede at validatoren ville forstå det når man definerede hvad det var <script type="text/javascript">????
Vil det så sige at det er umuligt at få det til at validere?
Skal man definere funktionen i head, og så kalde funktionen i body for at det kan validere?
Avatar billede olebole Juniormester
21. oktober 2005 - 13:09 #5
<ole>

Det er ikke fordi, validatoren ikke forstår JavaScript. Den tror bare, man mener det alvorligt, når man skriver en XHTML-DTD - og følgelig naturligvis overholder reglerne for XML. Derfor skal script naturligvis altid escape'es som CDATA.

Desuden hører document.write til under HTML og kan slet ikke anvendes under XHTML.

- og så er det med at snyde 'censor' noget, der hører folkeskolen til. Har man bare forstået lidt af, hvordan W3C's validator bruges, prøver man naturligvis ikke at snyde den - men retter sin kode, så den er valid  ;o)

/mvh
</bole>
Avatar billede mr_bula Nybegynder
21. oktober 2005 - 13:10 #6
fennec; havde prøvet dit nederste forsalg inden jeg postede spg, og det virker ikke. Dit første forslag virker heller ikke :(
Avatar billede cwboy Nybegynder
21. oktober 2005 - 13:10 #7
Du kan nok få den til at validere, hvis du gør nedenstående:

<script type="text/javascript">
<!--
var pics = ['billede1.jpg','billede2.jpg','billede3.jpg'];
document.write('<img src="' + pics[Math.floor(Math.random()*pics.length)] + '" border="none" alt="billede" />');
-->
</script>


eller


<script type="text/javascript">
//<![CDATA[
var pics = ['billede1.jpg','billede2.jpg','billede3.jpg'];
document.write('<img src="' + pics[Math.floor(Math.random()*pics.length)] + '" border="none" alt="billede" />');
//]]>
</script>


De fleste validatorer vil dog ikke tjekke output af scripts, så du skal selv være sikker på, at outputtet er korrekt.
Avatar billede mr_bula Nybegynder
21. oktober 2005 - 13:13 #8
Ole: Ved ikke hvad du mener med "escape'es som CDATA". Hvis det er svært at forklare så bare glem det så må jeg finde en anden løsning
Avatar billede olebole Juniormester
21. oktober 2005 - 13:15 #9
cwboy >> jamen, document.write kan stadig ikke anvendes under XHTML. Så nytter det jo ikke bare at escape script-blokken. Enhver browser, der forsøger at parse dokumentet som XHTML vil vælte død om med en XML-fejl  :)

mr_bula >> Det er, som cwboy skriver ... men det giver som sagt ingen mening at gøre det
Avatar billede olebole Juniormester
21. oktober 2005 - 13:16 #10
... næsten. Sådan skal det se ud:

<script type="text/javascript">
<![CDATA[
var pics = ['billede1.jpg','billede2.jpg','billede3.jpg'];
document.write('<img src="' + pics[Math.floor(Math.random()*pics.length)] + '" border="none" alt="billede" />');
]]>
</script>
Avatar billede cwboy Nybegynder
21. oktober 2005 - 13:22 #11
ole>> Anede ikke, at man ikke måtte/kunne bruge document.write i XHTML... så først de øvrige svar, da jeg postede ;)

Så kan det være noget lignende (hvor man har en lille 1x1 blank gif).

<img src="blank.gif" id="mitbillede" border="none" alt="billede" />
<script type="text/javascript"><![CDATA[
  var pics = ['billede1.jpg', 'billede2.jpg', 'billede3.jpg'];
  document.getElementById("mitbillede").src = pics[Math.floor(Math.random()*pics.length)];
]]></script>
Avatar billede olebole Juniormester
21. oktober 2005 - 13:25 #12
- og grunden til at cwboy escaper CDATA-escaping'en med // er, at det ellers ikke kan bruges i en browser. Årsagen til det er, at XHTML er totalt ubrugeligt på WWW ... men det er jo det, du ikke vil høre.
Hvorfor i alverden, du insisterer på at skrive skodkode, er mig en gåde ... men det må jo være dit problem  :)

Både cwboy og mr_bula >> Prøv at læse disse to artikler:
    http://www.eksperten.dk/artikler/537
    http://www.eksperten.dk/artikler/538

Det er vældig smart blandt newbies at kunne sige, man skriver XHTML ... blandt kompetente kodere bliver man til grin ved at sige det samme  :)
Avatar billede mr_bula Nybegynder
21. oktober 2005 - 13:27 #13
Hmmm cwboy's første mulighed (<!-- ) virker fint, den validere og vises som den skal i ie og firefox?
Når jeg bruger CDATA kommer den med en syntaksfejl?

Mente også at man godt måtte bruge document.write i XHTML?
Avatar billede cwboy Nybegynder
21. oktober 2005 - 13:29 #14
ole>> tak for de to links. Jeg arbejder selv med webdesign og -udvikling til hverdag. Er bl.a. med til at levere noget kode til en stak kunder - hader det som pesten, når de beder om XHTML, og at det samtidig skal vises nøjagtig ens i samtlige browsere på markedet....
Avatar billede mr_bula Nybegynder
21. oktober 2005 - 13:29 #15
Er ved at lave en side til en kampagne igennem min uddannelse, og vores krav er at siden skal kodes i xhtml med css ;)
Avatar billede milandt Nybegynder
21. oktober 2005 - 13:36 #16
Det er jo tit der der er problemet - det er ikke udvikleren der sætter kravene.. og ofte er det en politisk beslutning hvikle standarder der skal overholdes - og så vægtes anbefalinger fra udvikleren sjældent særligt tungt.
Avatar billede olebole Juniormester
21. oktober 2005 - 13:37 #17
mr_bula >> Så skulle du tage at vise din lærer de to links. Det er overvejende sandsynligt, han ikke aner det fjerneste om XHTML. Det er i hvert fald det indtryk, man får, når man taler med folk under IT-uddannelser.

Du _skal_ escape script som CDATA. Ellers har det intet med XHTML at gøre. cwboy's 'hack' virker kun, fordi dit dokument ikke tolkes som XHTML, men som HTML.

- og nej ... document.write er komplet umuligt at bruge under XHTML. Den virker _kun_ under HTML. Det samme gælder innerHTML, document.images, document.forms, m.m.m.

For det ikke skal være løgn kan du heller ikke skrive:
  document.getElementById("mitbillede").src = pics[Math.floor(Math.random()*pics.length)];
- under XHTML. Der skal stå:
  document.getElementById("mitbillede").setAttribute("src", pics[Math.floor(Math.random()*pics.length)]);

XHTML er voldsomt meget mere end blot at sætte en DTD, lukke tags og skrive med småt. Der er bare ingen tutorial-forfattere (og ganske få lærere), der ved det - formodentlig fodi de aldrig selv har skrevet et fungerende XHTML-dokument  :)
Avatar billede olebole Juniormester
21. oktober 2005 - 13:43 #18
milandt >> der er tale om en underviser, der gerne skulle lære de unge mennesker noget realistisk om webkodning. Det er ganske realistisk, at det er 'politiske' beslutninger, der ligger til grund for mange beslutninger i branchen ... men det ville nu være formålstjenligt, om de lærte noget realistisk kodning, først. Spørgsmålet er, om læreren overhovedet selv ved, hvad han underviser i. Jeg ved poitivt, at det yderst sjældent er tilfældet, når det drejer sig om XHTML.

At der ikke bliver lyttet til koderne, er der zq ikke noget at sige til. Webkodere er nogen af de dårligst uddannede her i landet - og de fleste har ikke kompetencer, der gør dem værd at lytte på. Bare spørg dem om XHTML, f.eks  ;o)
Avatar billede Slettet bruger
21. oktober 2005 - 14:07 #19
Nu er det jo ikke sikkert at underviseren har krævet at de skal bruge document.write, så lad os holde ham udenfor indtil andet er bevist ;)
Avatar billede olebole Juniormester
21. oktober 2005 - 14:26 #20
Han har bedt dem skrive et XHTML-dokument - men åbenbart ikke fortalt dem, XHTML er ubrugeligt på WWW - og at det bør behandles strict som XML. Så er det jo komplet umuligt at frembringe et begavet, brugbart resultat.

Det vidner om overordentlig stor mangel på enten pædagogiske eller kodemæssige kompetencer  :)
Avatar billede mr_bula Nybegynder
21. oktober 2005 - 14:26 #21
Super - siger tak for den gode og hurtige respons.

Ole: Tak for de to artikler, har virkelig fået noget stof til diskussion i min rapport, men har lige et spg. Nedestående, blive dokumentet ikke parsed som xml?

<?xml version="1.0" encoding="ISO-8859-15"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="da">
<head>
    <title>Side 1</title>
    <link href="forside.css" type="text/css" rel="Stylesheet" />
</head>

Ole og cwboy må gerne poste et svar
Avatar billede olebole Juniormester
21. oktober 2005 - 14:37 #22
Ja, i de browsere, der understøtter XHTML - og hvis du har sat serveren til at levere den korrekte MIME-type.
Korrekt MIME vil dog vælte IE, da den ikke understøtter XHTML, men i stedet vil tilbyde dig at downloade filen. End ikke IE7 kommer til at understøtte XHTML.

Sender du i stedet filen med den alm. MIME for HTML (text/html), vil ingen browser parse dokumentet som XHTML - og IE6 vil ydermere gå i quirks mode og derfor ikke understøtte CSS' box-model. Det skyldes, der står noget (din XML-prolog) før DTD'en.

Denne fejl bliver godt nok rettet i IE7 - men XHTML bliver altså stadig ikke understøttet  :o|
Avatar billede cwboy Nybegynder
21. oktober 2005 - 14:58 #23
c",) 
Jeg lærte trods alt også noget - så giv Ole flest point, hvis du har muligheden :)
Avatar billede cwboy Nybegynder
21. oktober 2005 - 14:58 #24
og så som et svar ;)
Avatar billede mr_bula Nybegynder
21. oktober 2005 - 15:29 #25
Jæs Ole får de fleste af de 15 point ;o)
Avatar billede olebole Juniormester
21. oktober 2005 - 15:30 #26
Tak for points  ;o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester