webForumDet fria alternativet

lista bilder (hantera array)

JavaScriptur Javascript

9 svar · 1 081 visningar · startad av Calevan

Medlem sedan maj 20031 173 inlägg
Frågan#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!

Medlem 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>
Medlem 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.

Medlem 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!

Medlem 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>"
Medlem 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 ' " \'

Medlem 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!

Medlem 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>"
Medlem 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! :)

Medlem 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>
140 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)