sR: unerklärliches JS-Verhalten

Hallo zusammen,

kann mir irgendeiner erklären, warum dieser Code-Schnipsel nicht korrekt ausgeführt wird:

  
[..]  
inputs=document.getElementById("tabelle_artikel").getElementsByTagName("input");  
anzip=inputs.length;  
[..]  
for(i=0;i<=anzip-1;i++) {  
  // Mindesmengen prüfen  
  if(inputs[i].value<mimearr[i] && inputs[i].value!="") {  
    alert('Sie unterschreiten die festgesetzte Mindestbestellmenge (Zeile '+i+', '+mimearr[i]+' Einheiten) für diesen Artikel !\n\nBitte korrigieren Sie Ihre Eingabe !');  
    inputs[i].style.backgroundColor='red';  
    inputs[i].style.color='white';  
    inputs[i].focus();  
    return false;  
  }  
}  
[..]  

Folgendes Verhalten zeigt sich :
Gebe ich in {Feld 1}={inputs[0]} einen Wert 1 ein, erkennt die Prg, dass dieser kleiner der Mindestbestellmenge 2 ist, der in mimearr[0] steht.
Durch den alert wird ausgegeben, dass in Zeile 0 der Mindestwert 2 nicht gegeben ist => daraus folgt, dass i=0 sein muss (logisch, bei der Programmierung)

Die Style-Eigenschaften ändert der Browser allerdings auf inputs[2] !!!!

Warum ist beim alert noch der korrekte Wert i=0 bekannt, eine Zeile weiter ist plötzlich i=2 ???

Habe diese Routine auch an anderen Stellen (Prüfung auf isNumber etc.) - da funktionierts fehlerfrei.

und...
habe ich noch während des Tippens hier getestet: setze ich den alert HINTER die Style-Anweisungen, funktionierts fehlerfrei.

Hinweis : Das Script wird durch Button aufgerufen; Browser IE

Thanks for help
Stephan

  1. Hallo,

    in dem angegebenen Code kann ich keinen Fehler finden, habs mal nachgebaut und es funktioniert wie gewünscht. Poste mal den Rest der Seite bzw. stell sie irgendwo online.

    vg ichbinich

    --
    Kleiner Tipp:
    Tofu schmeckt am besten, wenn man es kurz vor dem Servieren durch ein saftiges Steak ersetzt...
    1. Hallo,

      in dem angegebenen Code kann ich keinen Fehler finden, habs mal nachgebaut und es funktioniert wie gewünscht. Poste mal den Rest der Seite bzw. stell sie irgendwo online.

      vg ichbinich

      Hallo ichbinich,

      danke erstmal - muss ja eigentlich auch funktionieren ....

      Leider kann ich das nicht online stellen, da es auf einen Lotus-Domino-Server läuft

      sR

      1. Hallo,

        Leider kann ich das nicht online stellen, da es auf einen Lotus-Domino-Server läuft

        aber den code könntest du posten...

        schon mal den Cache gelöscht?

        vg ichbinich

        --
        Kleiner Tipp:
        Tofu schmeckt am besten, wenn man es kurz vor dem Servieren durch ein saftiges Steak ersetzt...
  2. servus sR,

    for(i=0;i<=anzip-1;i++) {

    // Mindesmengen prüfen
      if(inputs[i].value<mimearr[i] && inputs[i].value!="") {
        alert('Sie unterschreiten die festgesetzte Mindestbestellmenge (Zeile '+i+', '+mimearr[i]+' Einheiten) für diesen Artikel !\n\nBitte korrigieren Sie Ihre Eingabe !');
        inputs[i].style.backgroundColor='red';
        inputs[i].style.color='white';
        inputs[i].focus();
        return false;
      }
    }
    [..]

      
    Erklären kann ich es mir nicht, aber vielleicht hilft es, das alert erst nach der Schleife anzuzeigen. Merk dir i und unterbreche die Schleife mit break;  
      
    henf
    
    -- 
    "Sir, we are surrounded!" - "Excellent, we can attack in any direction!"
    
  3. hi,

    dein code müsste eigentlich fuzen.

    versuchs mal mit gäsefüsschen - nur so ein verdacht, dass der ie irgendwie i++=i+',+ missversteht.

    ..Zeile "+i+", "+mim..
    statt
    ..Zeile '+i+', '+mim..

    ralphi

  4. So, wie bereits zuvor geschrieben, löst sich das Problem, wenn ich den alert UNTER die Styles setze. (man vergleiche jedoch bitte die zuoberste Funktion, in der es nicht so geschieht, welche aber problemlos funktioniert !!!)

    Das Einfügen von Anführungszeichen in den Alert, bei der Ausgabe von i, ist nicht relevant. Habe das "zeile"-Ausgeben nur nachträglich in den Alert genommen, um i zu kontrollieren - eigentlich gehört's da nicht rein (höchstens i+1).

    Hier der Original-Code - wie beschrieben läuft's auf'm Domino-Server, d.h. es existiert kein HTML

      
    // Prüfen der Bestellmengeninhalte  
      
    function errzeile(nr) {  
       alert('Sie haben ein ungültiges Zeichen in ein Bestellmengenfeld eingetragen !\n\nBitte korrigieren Sie Ihre Eingabe !');  
       inputs[nr].style.backgroundColor='red';  
       inputs[nr].style.color='white';  
       inputs[nr].focus();  
    }  
      
    minme=document.getElementById('artikelliste_mindestmengen').value;  
    mimearr=minme.split(';');  
      
    inputs=document.getElementById("tabelle_artikel").getElementsByTagName("input");  
    anzip=inputs.length;  
    //  nichts ausgefüllt  
    leercount=0;  
    for(i=0;i<=anzip-1;i++) {  
      inputs[i].style.backgroundColor='white';  
      inputs[i].style.color='black';  
      if(inputs[i].value=="") leercount++;  
      if(isNaN(inputs[i].value) || inputs[i].value=="0") {  
    	this.blur();  
         errzeile(i);  
         return false;  
      }  
      // Mindestmengen prüfen  
      if(inputs[i].value<mimearr[i] && inputs[i].value!="") {  
        alert('Sie unterschreiten die festgesetzte Mindestbestellmenge ('+mimearr[i]+' Einheiten) für diesen Artikel !\n\nBitte korrigieren Sie Ihre Eingabe !');  
        inputs[i].style.backgroundColor='red';  
        inputs[i].style.color='white';  
        inputs[i].focus();  
        return false;  
      }  
    }  
    if(leercount==anzip) {  
       alert('Sie haben noch keine Artikelmenge eingetragen !\n\nBitte tragen Sie eine Bestellmenge ein oder klicken Sie auf "Bestellung abbrechen" um diesen Katalog zu verlassen.');  
       return false;  
    }  
    document.getElementById("hidden_save").click();