Avatar billede mik789 Nybegynder
04. juni 2002 - 18:22 Der er 9 kommentarer og
2 løsninger

nulstille værdi efter funktion

Jeg har en række ID'er som skal samles til en række af komma-adskilte argumenter samtidig med at de parres med argumentet 'no' og endelig sendes videre til en funktion.

Altså: ID00 ID01 ID02 ID03 - skal ende som:

'ID00','no','ID01','no','ID02','no','ID02','no'

Jeg har forsøgt med dette:

<script type="text/javascript">
argStrings = new Array('ID00','ID01','ID02','ID03');
function skrivArgumentStreng() {
  for (i=0; i<argStrings.length; i++) {
    argStrings[i] = '\''+argStrings[i]+'\''; // Alle argumenter ændres til tekststrenge
    argStrings[i]+=',\'no\'';              // Alle argumentstrengene parres med strengen ",'no'"
  }
  return argStrings;
}
</script>

Og:

<a href="java script:document.write(skrivArgumentStreng());">tjek skrivArgumentStreng()</a>

Det skriver også den ønskede streng, men når jeg aktiverer funtionen én gang til, skriver det:

''ID00','no'','no',''ID01','no'','no',''ID02','no'','no',''ID03','no'','no'

-Dvs. værdien af argStings ændres i funktionen og huskes anden gang funktionen køres. Jeg troede at værdier der tilskrives i funktionen ville være glemt uden for funktionen, så når funktionen kaldes for anden gang så skulle den starte forfra og få samme resultat. Hvad gør jeg galt? Eller er det noget med anførselstegnene?
Avatar billede mik789 Nybegynder
04. juni 2002 - 18:23 #1
ØV: nu driller eksperten igen: den får ikke mine backslashes med i scriptet ovenfor. SURT!
Avatar billede mik789 Nybegynder
04. juni 2002 - 18:26 #2
Jeg forsøger igen.

[esc] = backslash

function skrivArgumentStreng() {
  for (i=0; i<argStrings.length; i++) {
    argStrings[i] = '[esc]''+argStrings[i]+'[esc]''; // Alle argumenter ændres til tekststrenge
    argStrings[i]+=',[esc]'no[esc]'';              // Alle argumentstrengene parres med strengen ",'no'"
  }
  return argStrings;
}
Avatar billede o-zone Nybegynder
04. juni 2002 - 19:34 #3
Kan det være fordi arrays er referenceoverførte? Det er de i hvert fald i Java.

Du kan jo lade være med at manipulere med selve arrayet, men lave en kopi af den, hvor du putter resultatet i?
Avatar billede o-zone Nybegynder
04. juni 2002 - 19:38 #4
uden at have afprøvet det (jeg er især i tvivl om deklareringen af arrayCopy?), så noget i retning af:
---8<----------
function skrivArgumentStreng() {
arrayCopy = new Array[argStrings.length];
for (i=0; i<argStrings.length; i++) {
  arrayCopy[i] = '[esc]''+argStrings[i]+'[esc]''; // Alle argumenter ændres til tekststrenge
  argCopy[i]+=',[esc]'no[esc]'';      // Alle argumentstrengene parres med strengen ",'no'"
}
return arrayCopy;
}
---8<----------
Avatar billede mik789 Nybegynder
04. juni 2002 - 19:46 #5
o-zone> har lige testet. noget er galt
Avatar billede mik789 Nybegynder
04. juni 2002 - 20:12 #6
fandt vist selv ud af det med:

document.write('\'' + argStrings.join('\',\'no\',\'') + '\'');
Avatar billede mik789 Nybegynder
04. juni 2002 - 20:38 #7
yes, det var join() der skulle til
tak til o-zone for forsøget
;-)
Avatar billede jakoba Nybegynder
04. juni 2002 - 21:42 #8
hvis det du vil lave er eet langt array med enkeltord bør funktionen nok være:

<script type="text/javascript">
argStrings = new Array('ID00','ID01','ID02','ID03');
function skrivArgumentStreng() {
  var i = argStrings.length;
  var j = i * 2;
  while ( i > 0 ) {
      argStrings[--j] = 'no';
      argStrings[--j] = argStrings[--i]
  }
  return argStrings;
}
</script>

mvh JakobA
Avatar billede mik789 Nybegynder
04. juni 2002 - 23:14 #9
jakoba> takker. tester i morgen. nu kalder dynerne.
Avatar billede mik789 Nybegynder
05. juni 2002 - 21:07 #10
jakoba> Jeg har testet dit script med alert(skrivArgumentStreng()). Det opfører sig i stil med det jeg har i selve spørgsmålet ovenfor. Første gang funktionen kaldes skriver det korrekt:

ID00,no,ID01,no,ID02,no,ID03,no

- men anden gang, skriver det:

ID00,no,no,no,ID01,no,no,no,ID02,no,no,no,ID03,no,no,no

- og sådan fortsætter det.
Kun hvis siden genloades, skrives det korrekt.

Hvorfor opfører det sig egentlig sådan?
Avatar billede jakoba Nybegynder
05. juni 2002 - 21:32 #11
fordi scriptet skriver sit resultatarray tilbage i arrayet  argStrings[]
og næste gang der kaldes er det array så dobbelt så langt.

<script type="text/javascript">
argStrings = new Array('ID00','ID01','ID02','ID03');
function skrivArgumentStreng() {
  var resStrings = new Array();
  var i = argStrings.length;
  var j = i * 2;
  while ( i > 0 ) {
      resStrings[--j] = 'no';
      resStrings[--j] = argStrings[--i]
  }
  return resStrings;
}
</script>
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