14. december 2003 - 22:41Der er
31 kommentarer og 1 løsning
Funktion der kaldes i en anden funktion
Jeg skal have en funktion Shift(); som skal oprettes 'for(i=0;i<biler.length;i++)'. Det skal naturligvis nævnes at jeg har et array som hedder 'biler' Derefter kaldes funktionen Shift(); i en anden funktion Print(); som udføres 'for (i=0; i<8; i++)'. Print(); opretter en <table> hvori der nogle billeder. Ved klik på hvert billede skal funktionen Shift(); kaldes. Dvs. hvis Print(); har oprettet et billede 'for i=1', så skal Shift(); som er oprettet 'for i=1' kaldes. Jeg vil meget gerne have hjælp til at oprette Shift();
Det basale i funktionen ser således ud:
function Shift(){ imgStart=parseInt(biler[i].split("*")[6]); imgNum=imgStart; imgEnd=imgStart+4; imgNum++ if (imgNum==imgEnd) {imgNum=imgStart} document.bil_"+biler[i].split("*")[5]+".src=img["+imgNum+"].src } }
- det ses at 'biler[i].split("*")[6]' og 'biler[i].split("*")[5]' er værdier fra mit array 'biler'
Hvordan opretter jeg Shift(); således at der er en funktion Shift(); 'for(i=0;i<biler.length;i++)' som jeg kan kalde ved f.eks. at skrive Shift[i](); i min Print();-funktion.
Eksempel: For den gennemgang af Print(); hvor i=1 skal jeg ved at klikke på det billede der er oprettet af Print(); kalde Shift(); for i=1.
Jeg har det hele på nær en Shift();-funktion der virker ;o)
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
Jeg har en funktion, der bl.a. indeholder følgende:
function printCar1(){ txt=""; for (i=0; i<8; i++){ txt+="<td><a href=\"java script:imgShift();\"><img src=\"Pics/"+biler[i].split("*")[0]+"/IMAGE001.jpg\" name=\"bil_"+biler[i].split("*")[5]+"\"></a>} document.write("<tr>"+txt+"</tr>") }
Deri indgår imgShift();, som er mit problem. Jeg har brug for en funktion imgShift(); som kan antage forskellige værdier for hver gang imgShift(); kaldes. Dette: <td><a href=\"java script:imgShift();\"><img src=\"Pics/"+biler[i].split("*")[0]+"/IMAGE001.jpg\" name=\"bil_"+biler[i].split("*")[5]+"\"></a>}
oprettes for (i=0; i<8; i++).
imgShift skal udføres med forskellige værdier for hver gennemgang af printCar1. Så når jeg klikker på billedet for at kalde imgShift(); på det billede der er oprettet for i=1 i printCar1(); så skal imgShift se sådan ud:
function imgShift(){ imgStart=parseInt(biler[1].split("*")[6]); imgNum=imgStart; imgEnd=imgStart+4; imgNum++ if (imgNum==imgEnd) {imgNum=imgStart} document.bil_"+biler[1].split("*")[5]+".src=img["+imgNum+"].src } }
Jamen, så skriver du vel bare et argument ind i funktionskaldet: <a href=\"java script:imgShift();\"> bliver f.eks. til: <a href=\"java script:imgShift("+i+");\"> eller hvordan du nu vil overføre værdier.
Det hjalp en smule! Jeg får nu: 'img.+imgNum+.src' er null eller ikke et objekt.
Jeg har [] omkring "+imgNum+" fordi jeg skal have fat i billeder der er oprettet vha. :
var img=new Array(); for (i=0;i<biler.length; i++){ for (j=0;j<=4;j++) { img[parseInt(biler[i].split("*")[6])+j] = new Image(); img[parseInt(biler[i].split("*")[6])+j].src="Pics/"+biler[i].split("*")[0]+"/IMAGE00"+(j+1)+".JPG"; } }
Gudsjammerligt vrøvl, lad os kalde det det ;o) Det 'begynder' at hjælpe ;o) Funktionen ser nu sådan ud:
function imgShift(){ for(i=0;i<8;i++){ imgStart=parseInt(biler[i].split("*")[6]); imgNum=imgStart; imgEnd=imgStart+4; imgNum++ if (imgNum==imgEnd) {imgNum=imgStart} document.images["bil_"+biler[i].split("*")[5]+""].src=img[imgNum].src } }
Og den kaldes med imgShift(i);. Problemet er nu at når jeg klikker på et billede, så er det allesammen der skifter! Er deten mulighed at sætte 'for(i=0;i<8;i++)' udenfor funktionen og oprette funktionen i et array i stedet?
Jeg har forsøgt med: function imgShift(){ imgStart=parseInt(biler[i].split("*")[6]); imgNum=imgStart; imgEnd=imgStart+4; imgNum++ if (imgNum==imgEnd) {imgNum=imgStart} document.images["bil_"+biler[i].split("*")[5]+""].src=img[imgNum].src }
også, men der får jeg 'document.images[...]' er null eller ikke et objekt!
i'et var blot et eksempel på at du kan sende nogle argumenter med kaldet. Med dem kan du styre, hvad der skal ske, hvor. Hvad du skal sende med, ved du vist kun selv
Ok. Hvis jeg skal bruge imgShift(); hvor 'i' antager forskellige værdier er det så bare at kalde med imgShift(i); i funktionen printCar1. Altså:
function printCar1(){ txt=""; for (i=0; i<8; i++){ txt+="<td><a href=\"java script:imgShift(i);\"><img src=\"Pics/"+biler[i].split("*")[0]+"/IMAGE001.jpg\" name=\"bil_"+biler[i].split("*")[5]+"\"></a>} document.write("<tr>"+txt+"</tr>") }
Jeg har en <table> hvori billederne fra printCar1(); oprettes. Når jeg klikker på et af billederne(og kalder imgShift();) så udføres funktionen på alle billederne og det er jo ikke meningen. Funktionen skal kun kaldes på det billede hvor name=\"bil_"+biler[i].split("*")[5]+"\".
Vil det være lettere at oprette et array hvor der oprettes 'i' antal funktioner imgShift[i](); og så kalde den pågældende funktion i printCar1(); sådan(hvis man kan oprette array med funktioner altså):
function printCar1(){ txt=""; for (i=0; i<8; i++){ txt+="<td><a href=\"java script:imgShift[i]();\"><img src=\"Pics/"+biler[i].split("*")[0]+"/IMAGE001.jpg\" name=\"bil_"+biler[i].split("*")[5]+"\"></a>} document.write("<tr>"+txt+"</tr>") }
Min funktion ser præcis sådan ud: function imgShift(i){ imgStart=parseInt(biler[i].split("*")[6]); imgNum=imgStart; imgEnd=imgStart+4; imgNum++ if (imgNum==imgEnd) {imgNum=imgStart} document.images["bil_"+biler[i].split("*")[5]+""].src=img[imgNum].src }
Og kaldes med:
function printCar1(){ txt=""; for (i=0; i<8; i++){ txt+="<td><a href=\"java script:imgShift(i);\"><img src=\"Pics/"+biler[i].split("*")[0]+"/IMAGE001.jpg\" name=\"bil_"+biler[i].split("*")[5]+"\"></a>} document.write("<tr>"+txt+"</tr>") }
function imgShift(i){ imgStart=parseInt(biler[i].split("*")[6]); imgNum=imgStart; imgEnd=imgStart+4; imgNum++ if (imgNum==imgEnd) {imgNum=imgStart} document.images["bil_"+biler[i].split("*")[5]+""].src=img[imgNum].src }
Og kaldes med:
function printCar1(){ txt=""; for (i=0; i<8; i++){ txt+="<td><a href=\"java script:imgShift("+i+");\"><img src=\"Pics/"+biler[i].split("*")[0]+"/IMAGE001.jpg\" name=\"bil_"+biler[i].split("*")[5]+"\"></a>} document.write("<tr>"+txt+"</tr>") }
Men nu virker funktionen kun ved første klik på billedet! Jeg skifter billedet ud ved hvert klik, men det skifter kun første gang! Giver alt i denne ikke mening?
function imgShift(i){ imgStart=parseInt(biler[i].split("*")[6]); //imgStart sættes lig tallet som den pågældende bils billede-sti har
imgNum=imgStart; //imgNum tildeles værdien for imgStart
imgEnd=imgStart+4; imgEnd sættes lig den værdi som imgStart får når der er klikket 4 gange på billedet
imgNum++ //der lægges en til imgNum for hver gang funktionen udføres
if (imgNum==imgEnd) //hvis imgNum er lig imgEnd, altså hvis der er klikket 4 gange på billedet så
{imgNum=imgStart} sættes imgNum lig imgStart, dvs. man kan begynde forfra med klikke på billedet
document.images["bil_"+biler[i].split("*")[5]+""].src=img[imgNum].src } //det billede som klikkes på skifter til det billede der er gemt i billedstien bestemt udfra imgNum
function imgShift(i){ imgStart=parseInt(biler[i].split("*")[6]); //imgStart sættes lig tallet som den pågældende bils billede-sti har
imgNum=imgStart; //imgNum tildeles værdien for imgStart // -- og imgNum vil have samme værdi uanset hvor mange gange funktionen startes ...
imgEnd=imgStart+4; imgEnd sættes lig den værdi som imgStart får når der er klikket 4 gange på billedet // -- og det vil ske for hvert eneste kald ...
imgNum++ //der lægges en til imgNum for hver gang funktionen udføres // hver gang funktionen startes vil imgNum tælles een højere, end den havde, før denne kommando udføres, dvs. en mere en aflæsningen af parseInt(biler[i].split("*")[6]);
if (imgNum==imgEnd) //hvis imgNum er lig imgEnd, altså hvis der er klikket 4 gange på billedet så // imgNum vil altid være præcis 3 mindre end imgEnd ...
{imgNum=imgStart} sættes imgNum lig imgStart, dvs. man kan begynde forfra med klikke på billedet
document.images["bil_"+biler[i].split("*")[5]+""].src=img[imgNum].src } //det billede som klikkes på skifter til det billede der er gemt i billedstien bestemt udfra imgNum
Nu er problemet fundet og nu skal jeg bare have det løst! Jeg skal altså have deklareret imgStart=parseInt(biler[i].split("*")[6]) og imgNum=imgStart udenfor imgShift();
Jeg havde tænkt:
function printCar1(){ txt=""; for (i=0; i<8; i++){ txt+="<td onMouseover=\"imgStart="+parseInt(biler[i].split("*")[6])+",imgNum="+imgStart+" \"><a href=\"java script:imgShift(i);\"><img src=\"Pics/"+biler[i].split("*")[0]+"/IMAGE001.jpg\" name=\"bil_"+biler[i].split("*")[5]+"\"></a>} document.write("<tr>"+txt+"</tr>") }
altså at deklarere imgStart vha. en onmouseOver. Tager onMouseover så ikke værdien for 'i' for den pågældende bil som musen er over, som jeg gerne vil have den til?
Og finder imgShift() så ikke selv ud af at tage imgStart når der klikkes på billedet?
var imgStart=new Array(); for (i=0;i<biler.length; i++) {imgStart[i]=parseInt(biler[i].split("*")[6]);}
var imgNum=new Array(); for (i=0;i<biler.length; i++) {imgNum[i]=imgStart[i];}
og tilføjet imgStart[i], imgNum[i] i
function printCar1(){ txt=""; for (i=0; i<8; i++){ txt+="<td onMouseover=\"imgStart[], imgNum[i]\"><a href=\"java script:imgShift("+i+");\"><img src=\"Pics/"+biler[i].split("*")[0]+"/IMAGE001.jpg\" name=\"bil_"+biler[i].split("*")[5]+"\"></a>} document.write("<tr>"+txt+"</tr>") }
-det virker. Skulle I sidde med et forslag vil jeg stadig meget gerne høre om der er andre smarte måder at gøre det på. Smid venligst et svar hver, så deler jeg pointene mellem jer.
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.