Hallo,
nein. Das Problem hat imho nichts mit innerHTML zu tun, denn damit kann diese Opera-Version offenbar umgehen, wie die Benutzung in der eigentlich erheblich umfangreicheren Seite gezeigt hat.
Das gepostete Beispiel hat bei mir unter Opera 7.54 nach der innerHTML-Aenderung problemlos funktioniert.
bei mir auch, aber wie ich schon schrieb, mir geht es um die Ursachen. Mag sein, daß das rein akademisch zu bewerten ist, könnte aber doch Andere möglicherweise auf Fehler aufmerksam machen.
Folgendes Beispiel könnte eher die Problematik verursachen, denn es beweist, daß der Opera gar kein value-Attribut anlegt!
function createInput() {
inp1 = document.createElement('input');
inp1.setAttribute('id','x');
inp1.setAttribute('value','15');
inp1.setAttribute('name','xsize');
for(i=0;i<inp1.attributes.length;i++) { // kein Attribut mit Namen 'value' im Opera!
alert(inp1.attributes[i].nodeName + ": " + inp1.attributes[i].nodeValue);
}
}
>
> Kann ich nicht nachvollziehen, mit Opera 7.54 und 8.0 erhalte ich nach der Attributzuweisung den Wert 15:
>
> `alert(inp1.getAttribute("value"));`{:.language-javascript}
Das ist ja schön, aber warum nicht bei der Iteration durch die Attibutes Collection?
Diese ist ja gerade dazu da, auf Attribute zugreifen zu können, die auch existieren, sprich denen Werte zugewiesen wurde. Ich möchte gegebenenfalls nicht duch alle Attribute mit 'getAttribute(String)' durchprobieren.
Und da scheint mir auch der Zusammenhang zum innerHTML zu sein. Alle anderen Browser zeigen das Value-Attribut im Input-Element an, nur der Opera nicht.
Es wird jedoch wohl angezeigt, wenn ein Input-Element im HTML-Code der Seite steht.
Ebenso kann man bei einem solchen statischen Element wie zu erwarten durch die Attributes-Collection iterieren.
Und ich bin der Meinung daß das ein \_Fehler\_ ist, auch wenn es, mehr schlecht als recht, einen Workaround gibt.
cu,
ziegenmelker