Avatar billede koch Nybegynder
14. november 2003 - 20:33 Der er 28 kommentarer og
1 løsning

funktion med bl.a. <tr><td>

Det er måske en fordel at læse hele spg før det ses næremer på.

jeg har et array der indeholder

obj=new Array;
obj[0]="name*info*info1*info2*info3*info4*imgStart"
obj[1]="name*info*info1*info2*info3*info4*imgStart"
.
.
.
obj[8]="name*info*info1*info2*info3*info4*imgStart"

Er dette muligt?
WstatusOver="window.status='"+obj[i].split("*")[0]+"'; return true;"
WstatusOut="window.status=' '' ; return true;"

dataOver=""+obj[i].split("*")[5]+".style.backgroundcolor=\"#C7CBF0\""
dataOut=""+obj[i].split("*")[5]+".style.backgroundcolor=\"#FFFFFF\""



function print(){
for (i=0, i<=8)
document.write("<td onMouseover=\""+WstatusOver+"\" data"+dataOver+", onMouseout=\""+WstatusOut+"\", data"+dataOut+">
<a href=\"java script:ImgShift()\"><img src=\"Pics/"+obj[i].split("*")[0]+"/IMAGE001.jpg\" height=\"200\" width=\"250\" border=\"0\" name=\"obj_"+obj[i].split("*")[5]+"\" alt=\"klik for at se denne "+obj[i].split("*")[0]+" fra andre vinkler.\"></a>
<table cellpadding=\"2\" cellspacing=\"2\" border=\"1\" width=\"100%\"><tr><td ID=data"+obj[i].split(*)[5]+">
"+Mark+" "+obj[i].split("*")[0]+"<br />
"+Year+" "+obj[i].split("*")[1]+"<br />
"+Km+" "+obj[i].split("*")[2]+"<br />
"+Notice+" "+obj[i].split("*")[3]+"<br />
"+Price+" "+obj[i].split("*")[4]+"<br />
"+Nr+" "+obj[i].split("*")[5]+"
</td></td>")
if (i=4)
document.write("</tr><tr>")
}


i mit dokument hvor funktionen ser det således ud:
<table>
<tr>
her kaldes funktionen
</tr>
</table>

Det egentlige spg.:
Vil der ikke i første <tr> blive oprettet fire <td> og derefter indsættes </tr><tr> og så kommer fire nye <td><td>.
For hver gennemgang tages data fra det obj[i] som 'behandles', dvs. for obj[5] vil det være således


WstatusOver="window.status='"+obj[5].split("*")[0]+"'; return true;"
WstatusOut="window.status=' '' ; return true;"

dataOver=""+obj[5].split("*")[5]+".style.backgroundcolor=\"#C7CBF0\""
dataOut=""+obj[5].split("*")[5]+".style.backgroundcolor=\"#FFFFFF\""



function print(){
for (i=0, i<=8)
document.write("<td onMouseover=\""+WstatusOver+"\" data"+dataOver+", onMouseout=\""+WstatusOut+"\", data"+dataOut+">
<a href=\"java script:ImgShift()\"><img src=\"Pics/"+obj[5].split("*")[0]+"/IMAGE001.jpg\" height=\"200\" width=\"250\" border=\"0\" name=\"obj_"+obj[5].split("*")[5]+"\" alt=\"klik for at se denne "+obj[5].split("*")[0]+" fra andre vinkler.\"></a>
<table cellpadding=\"2\" cellspacing=\"2\" border=\"1\" width=\"100%\"><tr><td ID=data"+obj[5].split(*)[5]+">
"+Mark+" "+obj[5].split("*")[0]+"<br />
"+Year+" "+obj[5].split("*")[1]+"<br />
"+Km+" "+obj[5].split("*")[2]+"<br />
"+Notice+" "+obj[5].split("*")[3]+"<br />
"+Price+" "+obj[5].split("*")[4]+"<br />
"+Nr+" "+obj[5].split("*")[5]+"
</td></td>")
if (i=4)
document.write("</tr><tr>")
}

mht. <tr> så er obj[5] lige startet på ny <tr>, er dette korrekt?
Avatar billede olebole Juniormester
14. november 2003 - 21:16 #1
<ole>

Nej, der er få huller mellem fejlene. Jeg har ikke tid til at rette det, da det skal laves om 'fra toppen'  :)

/mvh
</bole>
Avatar billede skovenborg Nybegynder
20. november 2003 - 23:25 #2
Du skal jo nok lige afslutte den tabel og række du starter inde i din print-funktion eller passer det ikke (så bliver der jo lavet en ny tabel hver gang loopet starter forfra, og den afsluttes ikke igen).

Hvad skal den der data"+dataOver+" til for??? Den kommer forresten også nede i den anden celle:
ID=data"+obj... hvilket ikke giver så meget mening at den bare står der.
Avatar billede koch Nybegynder
22. november 2003 - 10:19 #3
Nu er småfejlene rettet tror jeg. data-tingen er ok,den bruges til at skifte farve i en celle når musen er over en anden celle. Funktionen ser nu sådan her ud:

WstatusOver="window.status='"+biler[i].split("*")[0]+"'; return true;"

WstatusOut="window.status=' '' ; return true;"

dataOver=""+biler[i].split("*")[5]+".style.backgroundcolor=\"#C7CBF0\""

dataOut=""+biler[i].split("*")[5]+".style.backgroundcolor=\"#FFFFFF\""


//table angives i galleriet, kun <td> er med i funktionen
function printiCar(){
for (i=0; i<=8; i++){
document.write("<td onMouseover=\""+WstatusOver+"\" data"+dataOver+", onMouseout=\""+WstatusOut+"\", data"+dataOut+"><a href=\"java script:ImgShift[i]()\"><img src=\"Pics/"+biler[i].split("*")[0]+"/IMAGE001.jpg\" height=\"200\" width=\"250\" border=\"0\" name=\"bil_"+biler[i].split("*")[5]+"\" alt=\"klik for at se denne "+biler[i].split("*")[0]+" fra andre vinkler.\"></a><table cellpadding=\"2\" cellspacing=\"2\" border=\"1\" width=\"100%\"><tr><td ID=data"+biler[i].split(*)[5]+">
"+Mark+" "+biler[i].split("*")[0]+"<br />
"+Year+" "+biler[i].split("*")[1]+"<br />
"+Km+" "+biler[i].split("*")[2]+"<br />
"+Notice+" "+biler[i].split("*")[3]+"<br />
"+Price+" "+biler[i].split("*")[4]+"<br />
"+Nr+" "+biler[i].split("*")[5]+"
</td></tr></table></td>");
if (i=4)
document.write("</tr><tr>")
if (i=8)
document.write("</tr>")
}
}

Funktionen kaldes inde mellem <table><tr> Her kaldes printiCar(); </table>
Avatar billede roenving Novice
22. november 2003 - 10:29 #4
Det ser ud som om, koden gør hvad du spørger om !-)

-- hvis du vel at mærke sørger for at din javascript-variabel _ikke_ indeholder linjeskift !-|

-- og så en optimering af document.write:

Saml hele din tekst sammen til een streng, da det skulle være væsentligt mindre krævende !-)

Altså:

function printiCar(){
txt="";
for (i=0; i<=8; i++){
txt+="<td onMouseover=\""+WstatusOver+"\" data"+dataOver+", onMouseout=\""+WstatusOut+"\", data"+dataOut+"><a href=\"java script:ImgShift[i]()\"><img src=\"Pics/"+biler[i].split("*")[0]+"/IMAGE001.jpg\" height=\"200\" width=\"250\" border=\"0\" name=\"bil_"+biler[i].split("*")[5]+"\" alt=\"klik for at se denne "+biler[i].split("*")[0]+" fra andre vinkler.\"></a><table cellpadding=\"2\" cellspacing=\"2\" border=\"1\" width=\"100%\"><tr><td ID=data"+biler[i].split(*)[5]+"> "+Mark+" "+biler[i].split("*")[0]+"<br /> "+Year+" "+biler[i].split("*")[1]+"<br /> "+Km+" "+biler[i].split("*")[2]+"<br />"+Notice+" "+biler[i].split("*")[3]+"<br />"+Price+" "+biler[i].split("*")[4]+"<br />"+Nr+" "+biler[i].split("*")[5]+"</td></tr></table></td>";
if (i=4)
txt+="</tr><tr>";
}
document.write(txt+"</tr>")
}

-- at overskue helt nøjagtigt hvad der sker, må vi vist overlade til skaberen af koden !-)
Avatar billede skovenborg Nybegynder
22. november 2003 - 12:04 #5
jeg forstår nu stadig ikke den onmouseover du har i den første celle du genererer...
først skrive du:
<td onMouseover=\""+WstatusOver+"\" - så er eventen afsluttet. Men nu skriver du jo bagefter data"+dataOver+" hvilket jeg ikke kan se meningen i, da den ligger uden for onmouseover-eventen.

Jeg vil nu mene at de to første linier skulle se sådan ud:
<td onMouseover=\""+WstatusOver+";data"+dataOver+";\", onMouseout=\""+WstatusOut+";data"+dataOut+";\">
Avatar billede koch Nybegynder
22. november 2003 - 15:14 #6
jeg skal nok vende tilbage til svarene. Men det driller lige lidt! Er det ok den måde jeg har defineret variablene udenfor funktinen på?

WstatusOver="window.status='"+biler[i].split("*")[0]+"'; return true;"
WstatusOut="window.status=' ' ; return true;"
dataOver=""+biler[i].split("*")[5]+".style.backgroundcolor=\"#C7CBF0\""
dataOut=""+biler[i].split("*")[5]+".style.backgroundcolor=\"#FFFFFF\""

Den første linie hvor WstatusOver er defineretfår jeg at vide at: biler[...] er null eller ikke et objekt!

Jeg har et array der hedder biler, men det er defineret ok mener jeg:
var biler=new Array()
biler[0] = "info0*info01*info02*info03*info04*info05*info06"
.
.
biler[8] = "info8*info81*info82*info83*info84*info85*info86"

     
Dernæst får jeg at vide at i selve funktionen hvor jeg benytter WstatusOver, at: 'WstatusOver' er ikke defineret!
Avatar billede skovenborg Nybegynder
22. november 2003 - 22:39 #7
du bliver vel nød til at inkludere WstatusOver og de tre andre inde i dit loop i funktionen printiCar().
Ellers giver den ikke meget mening:
for (i=0; i<=8; i++){
WstatusOver="window.status='"+biler[i].split("*")[0]+"'; return true;";
WstatusOut="window.status=' ' ; return true;"
dataOver=""+biler[i].split("*")[5]+".style.backgroundcolor='#C7CBF0'";
dataOut=""+biler[i].split("*")[5]+".style.backgroundcolor='#FFFFFF'";
txt+="<td onMouseover=\""+WstatusOver+"data"+dataOver+"\",....

og jeg har lige lavet \" om til ' så der ikke bliver nogen problemmer når du ligger den ind i txt strengen.
Avatar billede koch Nybegynder
23. november 2003 - 18:27 #8
det tager pusten fra min com.! Når filen åbnes så fryser com. efter at vinduet er åbnet. Det er efter jeg har deklareret variablerne inde i funktionen, så det ser ud som ovenstående!
Avatar billede roenving Novice
23. november 2003 - 18:30 #9
Prøv med:

for (i=0; i<=8; i++){
bil = biler[i].split("*");
WstatusOver="window.status='"+bil[0]+"'; return true;";
WstatusOut="window.status=' ' ; return true;"
dataOver=""+bil[5]+".style.backgroundcolor='#C7CBF0'";
dataOut=""+bil[5]+".style.backgroundcolor='#FFFFFF'";
txt+="<td onMouseover=\""+WstatusOver+"data"+dataOver+"\",....
Avatar billede koch Nybegynder
23. november 2003 - 19:39 #10
Den er desværre stadig gal! Kan det ikke være fordi at jeg vil tildele hver variabel flere værdier på samme tid? Skal jeg evt. oprette WstatusOver[i] i stedet for?
Avatar billede koch Nybegynder
23. november 2003 - 19:39 #11
og det samme med de andre variabler selvfølgelig
Avatar billede koch Nybegynder
23. november 2003 - 22:58 #12
Jeg forsøgte med:
WstatusOver[i]="window.status='"+bil[0]+"'; return true;";
WstatusOut[i]="window.status=' '; return true;";
dataOver[i]=""+bil[5]+".style.backgroundcolor='#C7CBF0'";
dataOut[i]=""+bil[5]+".style.backgroundcolor='#FFFFFF'";

Det 'hjalp' lidt, men så fik jeg at vide at variablerne(WstatusOver, WstatusOut, dataOver, dataOut), hvilket jeg ikke helt forstod da jeg har deklareret WstatusOver[i], WstatusOut[i], dataOver[i], dataOut[i]?
Men jeg har tilføjet inden funktionen:
var WstatusOver, WstatusOut, dataOver, dataOut

-det fik den fejl til at forsvinde, men nu får jeg at vide at 'linie 65 et objekt var ventet'
Det er på linie 65 at variablerne deklareres! dvs. der står på linie 65: WstatusOver[i]="window.status='"+bil[0]+"'; return true;";

Hvad er det med de satans variabler?! ;o)
Avatar billede koch Nybegynder
23. november 2003 - 23:11 #13
Rettelse så det giver mening:

Jeg forsøgte med:
WstatusOver[i]="window.status='"+bil[0]+"'; return true;";
WstatusOut[i]="window.status=' '; return true;";
dataOver[i]=""+bil[5]+".style.backgroundcolor='#C7CBF0'";
dataOut[i]=""+bil[5]+".style.backgroundcolor='#FFFFFF'";

Det 'hjalp' lidt, men så fik jeg at vide at variablerne(WstatusOver, WstatusOut, dataOver, dataOut) ikke var defineret, hvilket jeg ikke helt forstod da jeg har deklareret WstatusOver[i], WstatusOut[i], dataOver[i], dataOut[i]?
Men jeg har tilføjet inden funktionen:
var WstatusOver, WstatusOut, dataOver, dataOut

-det fik den fejl til at forsvinde, men nu får jeg at vide at 'linie 65 et objekt var ventet'
Det er på linie 65 at variablerne deklareres! dvs. der står på linie 65: WstatusOver[i]="window.status='"+bil[0]+"'; return true;";

Hvad er det med de satans variabler?! ;o)
Avatar billede skovenborg Nybegynder
23. november 2003 - 23:13 #14
måske skulle du fortælle scriptet at WstatusOver osv. er arrayes !-)

var WstatusOver = WstatusOut = dataOver = dataOut = new Array();

(ps. tror nok man kan gøre sådan - har bare ikke lige testet det)
Avatar billede koch Nybegynder
25. november 2003 - 10:52 #15
jeg skal vel have oprettet et array til:
bil = biler[i].split("*");
gøres det sådan her:
var bil=new Array();
bil[i]=biler[i].split("*");

Jeg har forsøgt med var WstatusOver = WstatusOut = dataOver = dataOut = new Array(); og

var WstatusOver=new Array();
var WstatusOut=new Array();
var dataOver=new Array();
var dataOut=new Array();

Men com. fryser stadig! Jeg skal lige være sikker på at det er en korrekt måde at oprette bil-arrayet på, for jeg tror det er der jeg har problemer nu!
Avatar billede skovenborg Nybegynder
25. november 2003 - 17:05 #16
du skal ikke oprette bil-arrayet hele tiden, bare gør det uden for funktionen ligesom de andre.

Fryser hele computeren eller er det bare browseren der brokker sig - det lyder lidt mystisk medmindre du er ramlet ind i et infitity loop hvilket jeg har svært ved at se du er.

Hvorfor er det at  WstatusOver og de andre skal være array'es??? Det kunne jo sagtens lade sig gøre med almindelige variabler, medmindre du skal bruge de enkelte senere.
Avatar billede koch Nybegynder
25. november 2003 - 22:43 #17
funktionen ser nu sådan ud:

function printiCar(){
txt="";
var WstatusOver, WstatusOut, dataOver, dataOut
for (i=0; i<=8; i++){
bil=biler[i].split("*");
WstatusOver[i]="window.status='"+bil[0]+"'; return true;";
WstatusOut[i]="window.status=' '; return true;";
dataOver[i]=""+bil[5]+".style.backgroundcolor='#C7CBF0'";
dataOut[i]=""+bil[5]+".style.backgroundcolor='#FFFFFF'";
txt+="<td ...

Jeg får at vide at 'linie 65, objekt var ventet'.
Linie 65:WstatusOver[i]="window.status='"+bil[0]+"'; return true;";

Jeg har ikke længere deklareret variablerne som arrays(som det ses).
Avatar billede roenving Novice
25. november 2003 - 23:01 #18
Det har du vel heller ikke brug for, da de jo skabes påny, ved hver iteration igennem løkken, så:

function printiCar(){
txt="";
var WstatusOver, WstatusOut, dataOver, dataOut
for (i=0; i<=8; i++){
bil=biler[i].split("*");
WstatusOver="window.status='"+bil[0]+"'; return true;";
WstatusOut="window.status=' '; return true;";
dataOver=""+bil[5]+".style.backgroundcolor='#C7CBF0'";
dataOut=""+bil[5]+".style.backgroundcolor='#FFFFFF'";
txt+="<td ...

-- hvilket også var filosofien bag, at jeg alene bruger een bil-variabel -- ikke et array, før den bliver det med split'en !-)
Avatar billede skovenborg Nybegynder
25. november 2003 - 23:08 #19
...desuden havde dit eksempel fra før også den fejl at du deklarerede de fire variabler som almindelige variabler, mens du forsøgte at bruge dem som arrayes.
Avatar billede koch Nybegynder
26. november 2003 - 17:22 #20
Den driller virkelig den funktion! Comp. fryser, og den fryser meget.jeg har udeladt det meste 'unødvendige' og funk. ser nu sådan her ud:

function printiCar(){
txt="";
for (i=0; i<=8; i++){
txt+"<td><a href=\"testlink\"><img src=\"Pics/"+biler[i].split("*")[0]+"/IMAGE001.jpg\" height=\"200\" width=\"250\" border=\"0\" name=\"bil_"+biler[i].split("*")[5]+"\" alt=\"navn\"></a><table cellpadding=\"2\" cellspacing=\"2\" border=\"1\" width=\"100%\"><tr><td>"+Mark+" "+biler[i].split("*")[0]+"<br />"+Year+" "+biler[i].split("*")[1]+"<br />"+Km+" "+biler[i].split("*")[2]+"<br />"+Notice+" "+biler[i].split("*")[3]+"<br />"+Price+" "+biler[i].split("*")[4]+"<br />"+Nr+" "+biler[i].split("*")[5]+"</td></tr></table></td>";
if (i=4)
txt+"</tr><tr>";
}
document.write(txt+"</tr>")
}
Avatar billede skovenborg Nybegynder
26. november 2003 - 19:19 #21
fryser den fuldstændig eller hva'??? Jeg kan ikke se noget som direkte skulle få det hele til at fryse.

Men browseren kan godt opføre sig lidt mærkelig når du bruger document.write() da den kan ikke rigtig bruges når først siden er loadet. Så hvis du kalder funktionen fx ved en onload event, så vil den ikke virke som forventet.
Avatar billede koch Nybegynder
26. november 2003 - 20:20 #22
Ja den frysert fuldstændigt! JEg har været lidt i tvivl om hvordan jeg skal kalde funktionen, så jeg har bare:

<script language="javascript">
  printiCar();
</script>

inde i min body. Jeg forventede bare at der slet ikke ville ske noget hvis dette ikke kunne lade sig gøre?!
Avatar billede skovenborg Nybegynder
26. november 2003 - 21:28 #23
ahh, jeg har fundet fejlen -
du skriver
if (i=4) som jo nok skal være if (i==4)

ellers kommer du ind i det såkaldte infinity loop, hvor du aldrig kommer ud af for-løkken og ja, så sker der ting og sager ;-)
Avatar billede skovenborg Nybegynder
26. november 2003 - 21:29 #24
...det tog lang tid - men det er jo en lille detalje der kan skabe store problemmer.

Men nu burde den være i orden
Avatar billede koch Nybegynder
01. december 2003 - 13:43 #25
Kanon, du er skarp :o) Det virker ;o) Mange tak. Smider I et svar hver, så deler jeg pointene. Der er en del af det som ikke er ok, men det tager jeg lige i et andet spg. Tak for hjælpen.
Avatar billede skovenborg Nybegynder
01. december 2003 - 17:21 #26
glad for det endelig virkede :-)
Avatar billede roenving Novice
01. december 2003 - 17:24 #27
-- og det må vel være skovenborgs points ;O)
Avatar billede koch Nybegynder
01. december 2003 - 17:35 #28
Meget fortjent ;o) mange tak for hjælpen begge to.
Avatar billede skovenborg Nybegynder
01. december 2003 - 18:01 #29
og takker for point :-)
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