unerklärliches JS-Verhalten
sR
- javascript
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
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,
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
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
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!"
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
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();