Opera und new option
Claus Peter
- javascript
0 molily
Hallo,
unter Opera 8.00 und 8.01 funktioniert der javascript Aufruf new option() nicht mehr, d.h., die Werte für "selected" werden nicht übernommen und sind "undefined". Das Select ist anschliessend willkürlich selektiert. DefaultSelected hat auch schon vorher nicht funtioniert, anschliessend waren immer alle (default und selected) Elemente selektiert.
Mit allen anderen getesteten Browser funktioniert es, einschließlich älterer Versionen von Opera.
Hat jemand eine Idee?
Viele Grüße
Claus Peter
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Test</title>
<meta http-equiv="expires" content="0">
<meta http-equiv=Content-Language content="de">
<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<script language="JavaScript" type="text/javascript">
<!--
// init Vars
var aszUser = new Array (
new Array("123", "123 - User1"),
new Array("234", "234 - User2"),
new Array("345", "345 - User3"),
new Array("456", "456 - User4"),
null
);
var aInitSelect = new Array (
new Array(1,1,0,1,null),
null
);
function SetDocumentOnStart()
{
var pFormElt;
var pOption;
var i,j;
for(i=0; pFormElt = document.getElementById('L' + i); i++)
{
for(j=0; j<aszUser.length-1 && null!=aInitSelect[i][j]; j++) // aszUser terminated by null!!!
{
pOption = new Option(aszUser[j][1], aszUser[j][0], 0, aInitSelect[i][j]);
alert("index: " + j + "; value:" + pOption.value + "; selected? - " + pOption.selected); // <-- pOtion.selected
// is undefined on Opera, Version 8.0, Build 7561, Win32, Windows 2000
pFormElt.options[j] = pOption;
}
}
}
//-->
</script>
</head>
<body onLoad="SetDocumentOnStart()">
<form name="__Test_" method="POST" action="./test.htm">
<p>Dropliste:</p>
<select id="L0" multiple size="5" name="Test">
<option></option> <!-- according to W3 Test -->
</select>
<p> </p>
</form>
</body>
</html>
Hallo,
unter Opera 8.00 und 8.01 funktioniert der javascript Aufruf new option() nicht mehr, d.h., die Werte für "selected" werden nicht übernommen und sind "undefined". Das Select ist anschliessend willkürlich selektiert.
Kann ich nicht nachvollziehen, es werden genau die richtigen Options selektiert. Opera 8.0 Final Linux. Offenbar liegt es daran, dass dein select bereits eine leere Option enthält, du aber mit options[0] = new Option(...) beginnst. Das mag ein Opera-Fehler sein, er setzt nämlich alles außer dem selected-Wert, wenn man die vorhandene Option durch ein neues Option-Objekt ersetzt. Das heißt, der selected-Wert der ersten Option wird falsch gesetzt, alle folgenden bei mir korrekt.
DefaultSelected hat auch schon vorher nicht funtioniert, anschliessend waren immer alle (default und selected) Elemente selektiert.
Ich verstehe die Bedeutung von DefaultSelected in diesem Kontext nicht. Wozu braucht man das? Man liest selected doch eh nie als Attributwert in dem Sinne aus.
pOption = new Option(aszUser[j][1], aszUser[j][0], 0, aInitSelect[i][j]);
alert("index: " + j + "; value:" + pOption.value + "; selected? - " + pOption.selected); // <-- pOtion.selected
// is undefined on Opera, Version 8.0, Build 7561, Win32, Windows 2000
pFormElt.options[j] = pOption;
Ich weiß ja nicht, worauf du mit der Abfrage von pOption.selected hinauswillst, schließlich kannst du den Wert an dieser Stelle auch über aInitSelect in Erfahrung bringen. Auf jeden Fall funktioniert die Abfrage, nachdem die Option eingehängt wurde, also nach dem obigen Befehl. Stelle den alert mal um.
<select id="L0" multiple size="5" name="Test">
<option></option> <!-- according to W3 Test -->
</select>
»W3 Test«?
Mathias
Options selektiert. Opera 8.0 Final Linux. Offenbar liegt es
daran, dass dein select bereits eine leere Option enthält, du
aber mit options[0] = new Option(...) beginnst.
Hallo Mathias,
vielen Dank für diesen Hinweis, das wars! Wenn man vor dem Überschreiben der Liste die Werte mit
pFormElt.options[x] = null;
setzt, dann funktioniert es.
Das mag ein Opera-Fehler sein, er setzt nämlich alles außer dem selected-Wert,
Es ist eine Opera Fehler, und leider nicht der einzige.
Ich verstehe die Bedeutung von DefaultSelected in diesem Kontext nicht. Wozu braucht man das? Man liest selected doch eh nie als Attributwert in dem Sinne aus.
So, wie ich es verstehe, brauchst Du DefaultSelected (der vorletzte Wert in new option() )in Zusammenhang mit dem ResetButton des Formulars. Darin werden die Werte gespeichert, bevor der User Änderungen durchführt. Den ResetButton habe ich jetzt durch eine Funktion ersetzen müssen, weil es mit Opera nicht funktionierte.
alert("index: " + j + "; value:" + pOption.value + "; selected? - " + pOption.selected);
Ich weiß ja nicht, worauf du mit der Abfrage von pOption.selected hinauswillst
Das war Debug Code ;-)) Unter IE liefert die Ausgabe sogar brauchbare Werte. Eine ältere Opera Version liefern generell false, Opera 8.00 generell undefined. Das hatte mich dann leider auf den Holzweg bei der Fehlersuche geführt.
<select id="L0" multiple size="5" name="Test">
<option></option> <!-- according to W3 Test -->
</select>»W3 Test«?
Wenn Du im Opera die Testfunktion benutzt, dann wird die aktuelle Seite an einen Server vom W3 Konsortium (http://validator.w3.org/check#) geschickt und der HTML Syntax auf Konformität getestet. Kann manchmal nicht schaden. In diesem Fall ist der Syntaxchecker über das leere Select gestolpert. Da ich das leere Select nur als Platzhalter verwende, habe ich eine leere Option eingefügt. Danach war der Syntaxckecker zufrieden und Opera kleiner 8 auch ;-))
Nochmals vielen Dank und viele Grüße
Claus Peter