Serge François: Schleife bricht ab

Hallo
Seit sein paar Tagen, versuche ich ein Programm zu erstellen, das Namen alphabetisch sortieren soll. In dieser Liste sind Sänger eingetragen in der Form Vorname + Zuname. Das Programm soll erst eine Liste erstellen in der Form Zuname + Vorname.
Aus irgendwelchem unverständlichen Grund,führt das Programm die erste Schleife aus und gibt den ersten Sänger wie gewünscht aus (Zuname + Vorname). Dann bricht es ab und geht nicht weiter. Ich hatte mit einer for Schleife angefangen mit dem gleichen Fehler. Dann habe ich mit der while Schleife probiert. Mehrere document.write sind als Kontrolle eingefügt (um den Wert der Variablen zu prüfen) Die erwarteten Werten sind auch drin enthalten. Ich habe aber den grund des Abbruchs nicht gefunden. Hierunten füge ich den Quellcode der Seite bei:
<script type="text/javascript">
<!--
function ABC(){

chanteurs = new Array(); //déclaration de tableau
 i=0; //compteur
 sortie = "";  //contenu de l'élément de liste
 nom_prenom = ""; //contenu après inversion des nom/prénom
 chanteur = new Array(); //tableau des chanteurs après inversion
 mots = ""; //nom et prénom du chanteur constituant l'élément de liste
 while (i  < document.getElementsByTagName("li").length){
   //document.write("ligne17: " + document.getElementsByTagName("li")[i].firstChild.data);
   chanteurs.push(document.getElementsByTagName("li")[i].firstChild.data);
   document.write("ligne 19: nombre d'éléments: " + document.getElementsByTagName("li").length + "<br>");
   sortie = sortie + chanteurs[i];
   document.write ("ligne 21: " + sortie + "<br>");
   mots = sortie.split (" ")   //séparation des nom/prénom
   nom_prenom = mots[1] + " " + mots[0];      //inversion nom et prénom
   document.write( "ligne 24: i et chanteur : " + i + " " + chanteurs[i] + "<br>");
   chanteur.push(nom_prenom);
   document.write ("ligne 26: i= " + i + " " + chanteur[i] + "<br>");
   }
chanteur.sort;
}
//-->
</script>
</head><body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">
<h1>Chanteurs dans l'ordre <span id="ordre">alphabétique de A à Z</span></h1>
<ol>
<li>Francis Cabrel</li>
<li>Georges Brassens</li>
<li>Claude Nougaro</li>
</ol>
<form name="formulaire" action="">
<input type="button" name="abc" value="alphabétiquement" onClick="ABC()">
</form>
</head>

</body>
</html>

Absichtlich sind alle Variablen global, da ich es auch probieren wollte.
Ich danke für denRatschlag falls jemand  mir einen Tipp geben kann
Serge François

  1. Aus irgendwelchem unverständlichen Grund,führt das Programm die erste Schleife aus und gibt den ersten Sänger wie gewünscht aus (Zuname + Vorname). Dann bricht es ab und geht nicht weiter. Ich hatte mit einer for Schleife angefangen mit dem gleichen Fehler. Dann habe ich mit der while Schleife probiert. Mehrere document.write sind als Kontrolle eingefügt (um den Wert der Variablen zu prüfen) Die erwarteten Werten sind auch drin enthalten. Ich habe aber den grund des Abbruchs nicht gefunden. Hierunten füge ich den Quellcode der Seite bei:

    Aber ich vermute, das du das Dokument neu beschreibst mit document.write() und danach ist alles weg. Du musst entweder mit Layern arbeiten oder mit Frames.

    Struppi.

  2. Hallo
    Seit sein paar Tagen, versuche ich ein Programm zu erstellen, das Namen alphabetisch sortieren soll. In dieser Liste sind Sänger eingetragen in der Form Vorname + Zuname. Das Programm soll erst eine Liste erstellen in der Form Zuname + Vorname.
    Aus irgendwelchem unverständlichen Grund,führt das Programm die erste Schleife aus und gibt den ersten Sänger wie gewünscht aus (Zuname + Vorname). Dann bricht es ab und geht nicht weiter. Ich hatte mit einer for Schleife angefangen mit dem gleichen Fehler. Dann habe ich mit der while Schleife probiert. Mehrere document.write sind als Kontrolle eingefügt (um den Wert der Variablen zu prüfen) Die erwarteten Werten sind auch drin enthalten. Ich habe aber den grund des Abbruchs nicht gefunden. Hierunten füge ich den Quellcode der Seite bei:
    <script type="text/javascript">
    <!--
    function ABC(){

    chanteurs = new Array(); //déclaration de tableau
     i=0; //compteur
     sortie = "";  //contenu de l'élément de liste
     nom_prenom = ""; //contenu après inversion des nom/prénom
     chanteur = new Array(); //tableau des chanteurs après inversion
     mots = ""; //nom et prénom du chanteur constituant l'élément de liste
     while (i  < document.getElementsByTagName("li").length){

    Wo wird eigentlich die Laufvariable i erhöht?

    //document.write("ligne17: " + document.getElementsByTagName("li")[i].firstChild.data);
       chanteurs.push(document.getElementsByTagName("li")[i].firstChild.data);
       document.write("ligne 19: nombre d'éléments: " + document.getElementsByTagName("li").length + "<br>");
       sortie = sortie + chanteurs[i];
       document.write ("ligne 21: " + sortie + "<br>");
       mots = sortie.split (" ")   //séparation des nom/prénom
       nom_prenom = mots[1] + " " + mots[0];      //inversion nom et prénom
       document.write( "ligne 24: i et chanteur : " + i + " " + chanteurs[i] + "<br>");
       chanteur.push(nom_prenom);
       document.write ("ligne 26: i= " + i + " " + chanteur[i] + "<br>");
       }
    chanteur.sort;
    }
    //-->
    </script>
    </head><body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">
    <h1>Chanteurs dans l'ordre <span id="ordre">alphabétique de A à Z</span></h1>
    <ol>
    <li>Francis Cabrel</li>
    <li>Georges Brassens</li>
    <li>Claude Nougaro</li>
    </ol>
    <form name="formulaire" action="">
    <input type="button" name="abc" value="alphabétiquement" onClick="ABC()">
    </form>
    </head>

    </body>
    </html>

    Absichtlich sind alle Variablen global, da ich es auch probieren wollte.
    Ich danke für denRatschlag falls jemand  mir einen Tipp geben kann
    Serge François

  3. Hi,

    function ABC(){
    i=0; //compteur
    sortie = "";  //contenu de l'élément de liste
    nom_prenom = ""; //contenu après inversion des nom/prénom
    chanteur = new Array(); //tableau des chanteurs après inversion
    mots = ""; //nom et prénom du chanteur constituant l'élément de liste
    while (i  < document.getElementsByTagName("li").length){
       //document.write("ligne17: " + document.getElementsByTagName("li")[i].firstChild.data);
       chanteurs.push(document.getElementsByTagName("li")[i].firstChild.data);
       document.write("ligne 19: nombre d'éléments: " + document.getElementsByTagName("li").length + "<br>");

    Hiermit hast Du Dein aktuelles Dokument vernichtet, womit keine <li> mehr vorhanden sind...

    sortie = sortie + chanteurs[i];
       document.write ("ligne 21: " + sortie + "<br>");
       mots = sortie.split (" ")   //séparation des nom/prénom
       nom_prenom = mots[1] + " " + mots[0];      //inversion nom et prénom
       document.write( "ligne 24: i et chanteur : " + i + " " + chanteurs[i] + "<br>");
       chanteur.push(nom_prenom);
       document.write ("ligne 26: i= " + i + " " + chanteur[i] + "<br>");
       }

    Hättest Du oben nicht das Dokument vernichtet, hättest Du eine Endlosschleife.
    Denn dann wäre document.getElementsByTagName("li").length konstant und i ist auch konstant. Also gibt es zwei Möglichkeiten: die Schleife wird gar nicht durchlaufen (wenn kein li vorhanden ist) oder endlos (wenn mind. ein li vorhanden ist, denn dann wäre i [immer 0] immer kleiner als die Anzahl der li)

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.