Avatar billede sluppermanden Nybegynder
04. april 2007 - 13:41 Der er 7 kommentarer og
1 løsning

Loop breaker efter return fra anden metode.

Hej,

Jeg har lavet et lille converterings script.
Det virker fint men når jeg bruger det i et loop break loopet efter at jeg har kaldt funktionen.

Nogen der har en løsning på det ?

Min kode ser således ud.

function find_changed(){
      var input = document.change_all.i_input
      var boxes = document.getElementsByName('checkbox');
      var box, id,result;
      result = '';
      for ( i=0; i<boxes.length; i++ ) {
          box= boxes[i];
          if(box!=null && box.checked){
            id = box.id
--->          new_id = conversion(document.getElementById('zidist0_'+id).value,6);
            result = result + new_id + "¤";
            result = result + document.getElementById('txtmd_'+id).value + ';' ;
          }
      }
      input.value = result.substring(0,result.length-1);
      document.change_all.save_all.click();
}

function conversion(incoming,size){
    for ( i = incoming.length ; i<size ; i++ ){
        incoming = '0' + incoming;
    }
    return incoming;
}
Avatar billede softspot Forsker
04. april 2007 - 13:53 #1
Prøv lige at smide et semikolon efter denne linie:

      id = box.id


Hvis det ikke fungerer, har du så nogen fornemmelse af hvilke værdisæt der giver problemet? Eller er det den første iteration der fejler?
Avatar billede olebole Juniormester
04. april 2007 - 13:58 #2
<ole>

Der er intet, der kan break'e noget i denne kode. Du må nok vise, hvordan du bruger koden - for fejlen må ligge et andet sted i din kode  =)

/mvh
</bole>
Avatar billede sluppermanden Nybegynder
04. april 2007 - 14:09 #3
Iteration løber indtil der kommer en box der er checked.

så løbes koden
            id = box.id
--->          new_id = conversion(document.getElementById('zidist0_'+id).value,6);
            result = result + new_id + "¤";
            result = result + document.getElementById('txtmd_'+id).value + ';' ;

igennem.

Herefter bliver der ikke itereret mere, selv om forløkkens betingelser ikke er overskredet.
Men jeg får lagt mit ene resultat ud.
Istedet for alle mine resultater som er checked.
Avatar billede sluppermanden Nybegynder
04. april 2007 - 14:21 #4
hvis jeg skifter koden ud uden at convertere, således

//new_id = alphaConversion(document.getElementById)'zidist0_'+id).value,6);
new_id = document.getElementById('zidist0_'+id).value;

Kører loopet igennem uden problemer.
Avatar billede sluppermanden Nybegynder
04. april 2007 - 14:25 #5
Det skal lige sige at konverterings metoden ligger i en separat .js fil.
Jeg tror dog ikke at dette har en betydning.
Avatar billede sluppermanden Nybegynder
04. april 2007 - 15:06 #6
@ole

Jeg vil meget gerne forklare det nærmere, men jeg ved ikke helt hvad du menere med "bruger koden".

Skærmbilledet er meget simple.
Jeg skal ændre nogle tekster som tilhører en bestemt linie.
Hvis teksten ændre sig checker jeg checkboxen, så jeg ved at den skal gemmes.
Når brugeren trykker gem looper jeg over alle checkboxes og samler dem der er ændret (checked).
Dem smider jeg i en lang resultat streng sammen med dets id, og submitter den enkelte linie som jeg har gemt resultatet i.

Dette virkede fint. Så lavede jeg konverterings metoden da mine id'er ikke blev rigtige. Herefter fik jeg kun den første ændrede med... :(

Håber det var mere forståeligt.
Avatar billede sluppermanden Nybegynder
04. april 2007 - 15:28 #7
Jeg fandt selv fejlen. :)

Problemet var at jeg brugte 'i' som iterator i begge mine løkkee, nr 2 løkke ændrede værdien af 'i' i nr 1 og den kom dermed uden for sin begrænsning.
Avatar billede softspot Forsker
04. april 2007 - 21:21 #8
Aaah ja, global kontra lokal scope... benyt lokal scope når du kan, det performer bedre og det er mere gennemskueligt. Altså

    for (var i = incoming.length ; i<size ; i++ ){
        incoming = '0' + incoming;
    }

i stedet for

    for ( i = incoming.length ; i<size ; i++ ){
        incoming = '0' + incoming;
    }
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