webForumDet fria alternativet

lista bilder (hantera array)

9 svar · 1 081 visningar · startad av Calevan

CalevanMedlem sedan maj 20031 173 inlägg
#1

Jag har en array som jag skickar till en funktion. Den funktionen ska byta bild i en annan frame med fint tidsintervall. Min funktion fungerar dock inte, hur ska jag skriva den?

Funktionen:

<SCRIPT Language="Javascript"> 
function bildspel(arrBildID){
    for (var i=0; i < arrBildID.length; i++) {
      setTimeout("parent.body.location.replace("foto.asp?sida=body&BildID=" + arrBildID[i] + "")",1000);
    } 
}
</SCRIPT>

Koden som fixar arrayen och som anroppar funktionen:

      response.write "<script  language=""javascript"">"
      response.write "var bildid = new Array(); "
      response.write "var i ;  i = 0;"
      
      While not RecSet.eof
       response.write "bildid[i++] = " & RecSet("bildid") & ";"
       RecSet.movenext
      WEnd

      response.write "</script>"
      Response.Write "<A HREF=""javascript:bildspel(bildid)"" target=""body"">Starta</A><br>" 
      
      RecSet.MoveFirst

Använder jag mig av rätt metod? eller har någon något annat förslag? tack!

dectgapMedlem sedan sep. 20021 655 inlägg
#2

Testa att ändra till:

<SCRIPT Language="Javascript"> 
function bildspel(arrBildID){
    for (var i=0; i < arrBildID.length; i++) {
      setTimeout("parent.body.location.replace('foto.asp?sida=body&BildID=" + arrBildID[i] + "')",1000);
    } 
}
</SCRIPT>
CalevanMedlem sedan maj 20031 173 inlägg
#3

Funkar inte det heller. Vet inte vad det är för fel. den säger att bildid är odefinierat. anroppar jag fel?

så är står det i min källkod på den sidan när arrayen ska vara fixad:

<script  language="javascript">
var bildid = new Array();
var i ;
i = 0;
bildid[i++] = 4177;
bildid[i++] = 4178;
bildid[i++] = 4179;
bildid[i++] = 4180;
</script>
<A HREF="javascript:bildspel(bildid)" target="body">Starta(2)</A><br>

behöver hjälp!

tack!

edit:
för att testa gå till http://w3.chs.chalmers.se/kommitteer/pyrot/fredrik/MSQLfoto/default.asp
logga in med gäst/gäst klicka vidare till någon kategori och sen klicka på start(2). Gör inget annat, allt funkar inte ännu.

CalevanMedlem sedan maj 20031 173 inlägg
#4

eftersom marsvinet inte tycker att denna frågan ska diskuteras i asp-forumet hoppas jag att någon här inne kan svara på frågan. Jag tror att felet är på denna raden:

Response.Write "<A HREF=""java script:bildspel(bildid)"" target=""body"">Starta</A><br>"

jag lyckas helt enkelt inte anropa mit script med den arrayen som jag skapat... hur ska den raden se ut? någon som vet?

tack!

ZaimanMedlem sedan dec. 20014 239 inlägg
#5

Kanske skriva raden såhär istället

Response.Write "<A HREF='java script:bildspel(bildid)' target='body'>Starta</A><br>"
ejickMedlem sedan mars 2001895 inlägg
#6

Saken är den att du använder förmycket fnuttar.

För att länken skulle vara korrekt borde det vara:

<a href="javascript:bildspel('bildid');" target="body">Starta</a>

Men då du använder Response.Write bör du ju ha fler fnuttar. Prova med att skriva fäljande:

Response.Write "<a href='javascript:bildspel(\'bildid\');" target='body'>Starta</a>"

Det verkar inte fungera att skriva ut. Men runt bildid skall det vara "backslash \"+ "enkelfnutt ' " \'

CalevanMedlem sedan maj 20031 173 inlägg
#7

ejick skrev:

Det verkar inte fungera att skriva ut. Men runt bildid skall det vara "backslash \"+ "enkelfnutt ' " \'

tyvärr hängde jag inte med på det... vilket av det du skrev ska jag skriva?

Response.Write "<a href='javascript:bildspel ( ' " \ " + " ' b i l d i d ' " ' ) ; " target='body'>Starta</a>"

skrev med mellanslag... inte riktigt så här va?

tack!

JohnsenMedlem sedan juli 2000836 inlägg
#8

Jag tror inte det är fel på citationstecknen, utan på skriptet i sig och hur det anropas.
Man kan bla. inte loopa en settimeout som du vill göra i din funktion.

Prova detta

<script language="javascript"> 

function initBild(vilkenArray){
	i = 0;
	arrBildID = vilkenArray;
	bildspel();
}

function bildspel(){
	if(i < arrBildID.length){
		setTimeout("parent.body.location.href='foto.asp?sida=body&BildID=" + arrBildID[i] + "'; bildspel();",1000);
		i++;
	}
}
</script>

<script  language="javascript">
var bildid = new Array();
var i ;
i = 0;
bildid[i++] = 4177;
bildid[i++] = 4178;
bildid[i++] = 4179;
bildid[i++] = 4180;
</script>

<a href="&#106;avascript:initBild(bildid)">Starta(2)</a>

Och skall du skriva ut länken med asp:

Response.Write "<a href=""&#106;avascript:initBild(bildid)"">Starta(2)</a>"
CalevanMedlem sedan maj 20031 173 inlägg
#9

Johnsen skrev:

massa bra saker

TACK!

jag hade inte testat själva funktionerna så mycket då jag inte lyckats att anropa dem med en korrect array innan. De funktionerna du skrev funkar bra! detta är min kod för att skapa arrayen och anropa funktionerna:

      response.write "<script  language=""javascript"">"
      response.write "var bildid = new Array(); "
      i = 0
      While not RecSet.eof
       response.write "bildid[" & i & "] = " & RecSet("bildid") & ";"
       i = i + 1
       RecSet.movenext
      Wend
      response.write "</script>" 
      %>
      
      <a href="javascript:initBild(bildid)">Starta</a><br>
      <A HREF="javascript:initBild()">Stoppa</A>

Har bara några frågor kvar nu:
1. Det blir ju en fördröjning innan första bilden visas, kan man ta sig runt det på något sätt?

2. Sen vill jag även att man ska kunna stoppa det hela. Jag testade genom att anropa funktionen utan array. Då fick jag ett felmedelande på sidan, så visas en bild i bildspelet till (setTimeout håller väll på med den) och sen stannar det. Finns det något sätt att få det att stanna direkt?

(3. Funderar på att göra tiden som indata till funktionen, så att en användare kan välja hur fort bildspelet ska gå... funkar det?)

TACK till alla som hjälp mig så här långt! kanonbra har ni varit! :)

JohnsenMedlem sedan juli 2000836 inlägg
#10

1. Utför första bildbytet i direkt vid anropet och inte i timern
2. Gör en clearTimeout
3. Skicka med tiden som en parameter i anropet

<script language="javascript"> 
var foo
function initBild(vilkenArray, tid){
	i = 0;
	arrBildID = vilkenArray;
	hastighet = tid? tid : 3000;
	parent.body.location.href="foto.asp?sida=body&BildID=" + arrBildID[i];
	i++;
	bildspel();
}

function bildspel(){
	if(i < arrBildID.length){
		foo = setTimeout("parent.body.location.href='foto.asp?sida=body&BildID=" + arrBildID[i] + "'; bildspel();",hastighet);
		i++;
	}
}
</script>

<a href="&#106;avascript:initBild(bildid, 1000)">Starta</a><br>
<a href="&#106;avascript:clearTimeout(foo)">Stoppa</a>
134 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)