Sanjoy: Zu blöd - finde/verstehe meinen Fehler nicht

Hallo liebe Helfer,

folgender Auszug aus meinem Script:

var buttonImg = new Array()
    buttonImg[0]=new Image();
    buttonImg[0].src="images/subTableExpandButton.png";
    buttonImg[1]=new Image();
    buttonImg[1].src="images/subTableCollapseButton.png";

function change(n)
{
 var SubRows = document.getElementById('tr'+n).getElementsByTagName('tr');
 var SubImages = document.getElementById('tr'+n).getElementsByTagName('img');

if (document.getElementById('tr'+n).style.visibility  != 'collapse')
 {
  document.getElementById('tr'+n).style.visibility  = 'collapse';
  document.getElementById('img'+n).src = buttonImg[0].src;
  for (var j=0; j<=SubImages.length; j++){
    if (SubImages[j].src == buttonImg[1].src)
    {var test='hallo'; }
  }
  for (var i=0; i<=SubRows.length; i++){
    if (SubRows[i].style.visibility == 'visible')
    {
     SubRows[i].style.visibility = 'collapse';
   }
  }
 } else {
  document.getElementById('tr'+n).style.visibility  = 'visible';
  document.getElementById('img'+n).src = buttonImg[1].src;
 }
}

Die Aktionen, die die zweite For-Schleife machen soll, funktionieren nicht, wenn ich in der ersten For-Schleife die oben stehende If-Abfrage stehen hab. Wenn ich es so hinschreibe, funktioniert es:
  for (var j=0; j<=SubImages.length; j++){

}
  for (var i=0; i<=SubRows.length; i++){
    if (SubRows[i].style.visibility == 'visible')
    {
     SubRows[i].style.visibility = 'collapse';
   }
  }
Verstehe den Fehler nicht, kann doch nur ein Syntaxfehler sein - zu blöd - Brett vorm Kopf!

Vielen Dank und liebe Grüße
Sanjoy

  1. Hi,

      
    
    >   for (var j=0; j<=SubImages.length; j++)  
    
    diese Schleife läuft einmal zu oft durch. Ersetze "<=" durch "<", weil du sonst beim letzten Durchlauf ein uninitialisiertes Element (hier SubImages[SubImages.length]) zugreifst.  
    
    >   {  
    >     if (SubImages[j].src == buttonImg[1].src)  
    >     {var test='hallo'; }  
    >   }  
      
    
    >   for (var i=0; i<=SubRows.length; i++)  
    
    siehe oben  
    
    >   {  
    >     if (SubRows[i].style.visibility == 'visible')  
    >     {  
    >      SubRows[i].style.visibility = 'collapse';  
    >     }  
    >   }  
    >  } else {  
    >   document.getElementById('tr'+n).style.visibility  = 'visible';  
    >   document.getElementById('img'+n).src = buttonImg[1].src;  
    >  }  
    > }  
    
    

    Die Aktionen, die die zweite For-Schleife machen soll, funktionieren nicht, wenn ich in der ersten For-Schleife die oben stehende If-Abfrage stehen hab. Wenn ich es so hinschreibe, funktioniert es:
      for (var j=0; j<=SubImages.length; j++){

    Hier greifst du auf keine Elemente zu, darum funktioniert es wohl.

    }
      for (var i=0; i<=SubRows.length; i++){
        if (SubRows[i].style.visibility == 'visible')

    Warum das funktioniert bin ich überfragt.

    {
         SubRows[i].style.visibility = 'collapse';
       }
      }
    Verstehe den Fehler nicht, kann doch nur ein Syntaxfehler sein - zu blöd - Brett vorm Kopf!

    Um (Syntax-)Fehler zu finden ist beispielsweise die Fehler-Konsole vom Firefox recht nützlich.

    mfG,
    steckl

    1. Hallo Steckl,

      oh man wie blöd - vielen Dank für deine schnelle Hilfe! Jetzt funktioniert es! Irritierend nur, dass es teilweise auch schon vorher geklappt hat - deswegen hab ich Länge der Schleife gar nicht mehr überprüft.

      Fehler-Konsole vom Firefox? Ist das ein bestimmtes Add-on oder wo finde ich die?

      Liebe Grüße
      Sanjoy

      1. Hi,

        ... deswegen hab ich Länge der Schleife gar nicht mehr überprüft.

        Hättest du aber sollen ;-)

        Fehler-Konsole vom Firefox? Ist das ein bestimmtes Add-on oder wo finde ich die?

        Nein, die ist schon standardmäßig implementiert.
        Du findest sie unter "Extras -> Fehler-Konsole".
        Alternativ kannst du auch "javascript:" in die Adressleiste eingeben.
        So ist es zumindest im FF2, aber ich glaube das es in älteren Versionen genauso ist.

        mfG,
        steckl

  2. Hallo Sanjoy,

    und wie äußert sich der Fehler?
    Hast Du schon mal einen Blick in die Fehlerkonsole geworfen?

    for (var j=0; j<=SubImages.length; j++){

    for (var i=0; i<=SubRows.length; i++){

    Arrayelemente laufen in Javascript von 0 bis (n-1). Ersetze mal das "<=" durch ein "<". Vieleicht war es das ja.

    Gruß, Jürgen