(BROWSER) Opera 7-Bug? Listeneinträge werden ohne Grund geändert
Utz
- javascript
Hallo zusammen,
das ist ein Doppelposting :-) - vor stark ne Woche hab ich das schon mal gepostet, aber ohne Antwort. Ich vermute, das lag vielleicht daran, dass der Code anhing und nicht online war. Jetzt hab ich ihn online gestellt: http://www.mandoline.de/divers/operabug.htm. Also: bitte mal mit Opera 7 besuchen und wenigstens sagen, ob Ihr das Fehlverhalten bestätigen könnt - dann könnte man es Opera zumindest mal melden.
Es geht um folgendes: ich habe eine einfach Rabattberechnung: auf zwei Lizenzarten ("Personal" und "Professional") gibt es 30% Rabatt, auf eine dritte ("Enterprise") dagegen nicht.
Opera 7 (getestet: 7 und 7.02 auf NT4 auf zwei verschiedenen Systemen) zeigt damit folgendes Verhalten: Wählt man bei "Lizenzform" Personal oder Professional und klickt dann auf "Preis berechnen" (oder ändert die Lizenzanzahl), wird die Berechnung korrekt durchgeführt, aber die Lizenzform springt anschließend wieder zurück auf "Enterprise". In der echten Variante wird damit also immer die falsche Lizenzart verschickt. Zur Verdeutlichung ist im Beispielcode ein Alert-Fenster als Breakpoint eingebaut, kurz bevor dieser Listeneintrag zurückspringt.
Durch Probieren hab ich herausgefunden, dass dieses Verhalten nicht mehr auftritt, wenn eine bestimmte Zeile auskommentiert wird (im Quellext zeigt Euch ein Kommentar die Zeile). Bloß: diese Zeile ändert den Wert eines Hidden-Feldes, und ich kann keinen Zusammenhang zwischen ihr und dem Verhalten erkennen.
Überflüssig zu sagen, dass der Code mindestens in IE 5 und Mozilla 1.0 problemlos läuft.
Könnt Ihr dieses Fehlverhalten bei Euch reproduzieren, oder ist einfach meine Installation kaputt?
Falls Ihr es reproduzieren könnt: Habt Ihr ne Idee woran es liegt und was man dagegen tun könnte? Oder muss man es einfach als Bug akzeptieren?
Grüße,
Utz
Hallo,
Opera 7 (getestet: 7 und 7.02 auf NT4 auf zwei verschiedenen Systemen) zeigt damit folgendes Verhalten: Wählt man bei "Lizenzform" Personal oder Professional und klickt dann auf "Preis berechnen" (oder ändert die Lizenzanzahl), wird die Berechnung korrekt durchgeführt, aber die Lizenzform springt anschließend wieder zurück auf "Enterprise".
Opera 7.02 auf W2k -> selbes "Problem"
Hmm, wenn ich den "selected"-Eintrag bei der Lizenzform lösche, dann gibt's keine Probleme, dann müsstest Du halt nur noch den Enterprise-Eintrag an die erste Stelle setzen, damit er default-mäßig ausgewählt ist.
Falls Ihr es reproduzieren könnt: Habt Ihr ne Idee woran es liegt und was man dagegen tun könnte? Oder muss man es einfach als Bug akzeptieren?
Eine Möglichkeit wäre zumindest mal auf den selected-Eintrag zu verzichten. Ansonsten muss man wohl damit leben...
Grüße
Andreas
Hallo Andreas,
Eine Möglichkeit wäre zumindest mal auf den selected-Eintrag zu verzichten.
Tja, diese Option hab ich leider nicht - das ganze ist sozusagen ein HTML-"Schnappschuss" aus einem dynamischen Prozess: Leute durchlaufen den Bestellvorgang, können am Ende noch mal korrigieren, und kommem _dann_ an die besagte Stelle - da muss ich natürlich die Optionen selektieren, die die Leute beim ersten Mal ausgewählt hatten. Die Reihenfolge ändern wäre auch Käse, das ist ja keinem zu vermitteln, warum die beim zweiten Durchlauf anders als beim ersten ist.
Also wohl doch ein Bug in Opera, hm...da bleibt mir wohl nix anders übrig als:
<script type="text/javascript">
if (window.opera) {
var sUserAgent = navigator.userAgent;
var sMatch = sUserAgent.match(/Opera[/ ]7/i);
if (sMatch) alert("Bitte wählen Sie sorgfältig aus! Ihr Browser erlaubt es Ihnen nicht, später noch was zu korrigieren...");
}
</script>
(SCNR)
Grüße,
Utz
Hallo Utz,
tatsächlich ein seltsames Problem. Tritt bei mir auch auf.
Interessanterweise verschwindet das Problem aber, wenn das RabattLicensePrice-Input zu einem sichtbaren Eingabefeld wird: Mit folgender Änderung funktioniert's bei mir:
<input type="text" name="RabattLicensePrice" value="">
^^^^
(hier statt "hidden" "text" einsetzen)
Auch wenn das Eingabefeld dann durchs stylesheets unsichtbar gemacht wird, hat Opera auf einmal keine Probleme mehr:
<input type="text" name="RabattLicensePrice" value="" style="display:none">
Trotzdem verstehe ich's nicht.
Viel Erfolg,
Robert
PS: Um von einem Preis 30% Rabatt abzuziehen rechne ich normalerweise "Math.round(preis*0.7)". Ich vestehe nicht ganz, wozu die ganzen anderen Anweisungen gut sein sollen.
Hallo Robert,
Interessanterweise verschwindet das Problem aber, wenn das RabattLicensePrice-Input zu einem sichtbaren Eingabefeld wird (...) Auch wenn das Eingabefeld dann durchs stylesheets unsichtbar gemacht wird, hat Opera auf einmal keine Probleme mehr:
Das hatte ich bisher noch nicht probiert, danke. Ich denke zwar nicht, dass ich den Workaround einsetzen werde (ein per CSS unsichtbar gemachtes Textfeld ist mir nicht "hidden" genug), aber damit wird noch deutlicher, dass das Problem durch den JS-Zugriff auf ein hidden-Feld ausgelöst wird.
PS: Um von einem Preis 30% Rabatt abzuziehen rechne ich normalerweise "Math.round(preis*0.7)". Ich vestehe nicht ganz, wozu die ganzen anderen Anweisungen gut sein sollen.
Oh, das bleibt halt übrig wenn man den für diesen Zweck irrelvanten Code rausstreicht und den Rest nicht noch mal neu formuliert :-) Die vollständige Variante prüft, ob rawPrize == Math.floor(rawPrize) ist oder nicht und formatiert je nachdem den Ergebnisstring etwas anders (mit ",-" am Ende der Zahl oder nicht).
Grüße,
Utz