InternetExplorer Problem bei Elementzugriff über ID
Jogi
- javascript
Hallo,
ich bin leicht ratlos inzwischen, maybe habe ich auch nen Brett vorm Kopp..
Ich bin auf einem Zopewebserver unterwegs, meine HTML Seiten werden über Pagetemplates generiert.
Es gibt eine Javascript Funktion, die derzeit im InternetExplorer6.0 Probleme bereitet.
Es geht um folgende Checkbox
<input
type="checkbox" checked="checked"
onclick="enableCheckbox(this.checked, this.name)"
name="property_showHistory" />
es gibt das passende Element mit:
<span
id="property_showHistory"></span>
Die Funktion enableCheckbox(..) enthält in Zeile xy folgende Anweisung:
document.getElementById(checkboxName).innerText = "kritische Änderung";
Kommt es nun im InternetExplorer zum Funktionsaufruf kommt die Fehlermeldung
"Es ist ein Laufzeitfehler aufgetreten. [bla]
Zeile: xy
Fehler: Unbekannter Laufzeitfehler"
Schreibe ich ins fragliche span-Tag bereits vorher einen Text, und lasse mir ihn mit
alert(document.getElementById("property_showHistory").innerText) anzeigen, so seh ich gar nix
alert(document.getElementById("property_showHistory")) bringt "[object]" zu Tage
verwende ich also nicht den Inhalt der Variable sondern verwende genau den String "property_showHistory", so geht es auch nicht.
Ändere ich nun in meinem Pagetemplate an fragl. Stelle die id vom span-Tag auf "property_showHistoru" (U!!!!! am Ende) und ändere meine getElementById-Anweisung ebenfalls auf "property_showHistoru", dann klappt es!!
Ok, ändere ich nun den Namen der Checkbox (siehe oben) auf "property_showHistoru" und lasse den Zugriff wieder über den Inhalt der übergebenen Variablen laufen, dann klappt es NICHT mehr!
Versuche ich im Folgenden wieder genau mit dem String, also alert(document.getElementById("property_showHistoru").innerText)
den Text der im span-Tag steht auszugeben (hat ja vorher gefunzt), dann kriege ich nen kleinen Anfall, denn es klappt nicht mehr!
Die id "property_showHistoru" verweist fortan wie von Zauberhand auf ein sonst-wo-Objekt, nur nicht das was ich haben will.
jemand eine Idee??
ich bin leicht ratlos inzwischen, maybe habe ich auch nen Brett vorm Kopp..
ich sach mal ja ;-)
Es geht um folgende Checkbox
<input
type="checkbox" checked="checked"
onclick="enableCheckbox(this.checked, this.name)"
name="property_showHistory" />
Wozu this.name?
Wenn du der Funktion nur this übergibst, brauchst du in der Funktion nicht mehr über
document.getElementById(checkboxName).innerText = "kritische Änderung";
darauf zuzugreifen, zumal das falsch ist und innerText auch, wenn überhaupt dann
.value - Wieso sollte eine checkbox einen innerText haben???
innerText ist darüber hinaus auch IE only, es gibt mehrere gleichwertige Methoden die in allen Browsern funktikonieren.
Struppi.
hi,
zumal das falsch ist und innerText auch, wenn überhaupt dann
.value - Wieso sollte eine checkbox einen innerText haben???
Er will ja gar nicht auf die Checkbox zugreifen, sondern auf den Span, dessen ID dem Namen der Checkbox entspricht.
Nur genau diese Namens-/ID-Gleichheit macht im IE m.W. Probleme.
gruß,
wahsaga
hi,
alert(document.getElementById("property_showHistory")) bringt "[object]" zu Tage
Und was bringt
alert(document.getElementById("property_showHistory").nodeName)
?
Würde mich nicht wundern, wenn das "input" - und nicht dein "span", den du an dieser Stelle erwartest.
Der IE greift AFAIK über getElementById auch auf Elemente mit name-Attribut zu.
gruß,
wahsaga
Und was bringt
alert(document.getElementById("property_showHistory").nodeName)
?
INPUT :P
danke!! das wars ;)
-_-
Hi,
Der IE greift AFAIK über getElementById auch auf Elemente mit name-Attribut zu.
Vielleicht wegen
"Note. The id attribute shares the same name space as the name attribute when used for anchor names. "
(http://www.w3.org/TR/html4/struct/global.html#id-and-class, ganz am Ende des Abschnitts, direkt vor 7.5.3)
cu,
Andreas
hi,
Der IE greift AFAIK über getElementById auch auf Elemente mit name-Attribut zu.
Vielleicht wegen
"Note. The id attribute shares the same name space as the name attribute when used for anchor names. "
Ja, eine derart eigenartige Interpretation ist MS durchaus zuzutrauen.
Sie "werben" ja auch fast noch mit dieser Art von Feature:
MSDN: getElementById:
"Returns the first object with the same ID attribute as the specified value.
If the ID value belongs to a collection, the getElementById method returns the first object in the collection."
gruß,
wahsaga
Der IE greift AFAIK über getElementById auch auf Elemente mit name-Attribut zu.
Vielleicht wegen
"Note. The id attribute shares the same name space as the name attribute when used for anchor names. "Ja, eine derart eigenartige Interpretation ist MS durchaus zuzutrauen.
So ganz ne Logik dahinter scheint es aber nicht zu geben, oder?
Gerade mal folgenden Testcode geschrieben:
---
<html>
<head>
<title>bla</title>
</head>
<body>
<script language="javascript">
function bla() {
document.getElementById("eintest").style.borderColor = "red";
}
</script>
<input type="button" onclick="javascript:bla()" value="test" />
<div style="width: 200px; height: 200px;">
<div name="eintest" style="border: 1px solid; margin: 10px;">div mit name</div>
<div id="eintest" style="border: 1px solid; margin: 10px;">div mit id</div>
</div>
</body>
</html>
---
der ie umrahmt des div mit der Id rot, und nicht des mit dem Namen, obwohl es zuerst im Dokument vorkommt
hi,
So ganz ne Logik dahinter scheint es aber nicht zu geben, oder?
Doch ...
der ie umrahmt des div mit der Id rot, und nicht des mit dem Namen, obwohl es zuerst im Dokument vorkommt
Div hat ja auch kein name-Attribut.
Input aus deinem ersten Beispiel hat aber schon.
gruß,
wahsaga
Div hat ja auch kein name-Attribut.
Input aus deinem ersten Beispiel hat aber schon.
aja stimmt ja -
zu schnell gedacht ;)