IE-Interpretationsfehler
Froggels
- javascript
Hallo,
Ich habe ein JavaScript das mir das einblenden und ausbelenden von Spalten ermöglicht. Nun habe ich heute das alles mal im InternetExplorer getestet und sehe da es funktioniert nicht.
Im Mozilla klappt das Script ohne Probleme.
Kann mir evt. einer sagen warum IE das nicht macht bzw. falsch interpretiert?
Hier der Quellcode:
<HTML>
<HEAD>
<script type="text/javascript">
var ns6=document.getElementById&&!document.all
var ie4=document.all&&navigator.userAgent.indexOf("Opera")==-1
if (ie4||ns6)
document.onclick=checkcontained
function checkcontained(e)
{
var iscontained=0
cur=ns6? e.target : event.srcElement
i=0
if (cur.id=="foldheader")
iscontained=1
else
while (ns6&&cur.parentNode||(ie4&&cur.parentElement))
{
if (cur.id=="foldheader"||cur.id=="foldinglist")
{
iscontained=(cur.id=="foldheader")? 1 : 0
break
}
cur=ns6? cur.parentNode : cur.parentElement
}
if (iscontained)
{
var foldercontent=ns6? cur.nextSibling.nextSibling : cur.all.tags("UL")[0]
if (foldercontent.style.display=="none")
{
foldercontent.style.display=""
}
else
{
foldercontent.style.display="none"
}
}
}
</script>
</HEAD>
<BODY>
<Table border="1">
<tr id="foldheader">
<td colspan="1" valign="top" width="10%">
VORNAME
</td>
<td class="label" colspan="1" valign="top" align="right" width="10%">
NACHNAME
</td>
</tr>
<tr id="foldinglist" style="display:none" style=&{head};>
<td colspan="2" valign="top" width="20%">
INFORMATIONEN
</td>
</tr>
</BODY>
</HTML>
Yerf!
Kann mir evt. einer sagen warum IE das nicht macht bzw. falsch interpretiert?
[...]
var foldercontent=ns6? cur.nextSibling.nextSibling : cur.all.tags("UL")[0]
Evtl. weil im HTML klein <ul> vorkommt?
Gruß,
Harlequin
Hallo,
var foldercontent=ns6? cur.nextSibling.nextSibling : cur.all.tags("UL")[0]
Evtl. weil im HTML klein <ul> vorkommt?
Da kommt doch nirgends ein ul vor (weder groß noch klein) oder war ein Tippfehler und Du meintest kein?
Viele Grüße
Michi
Yerf!
Hallo,
var foldercontent=ns6? cur.nextSibling.nextSibling : cur.all.tags("UL")[0]
Evtl. weil im HTML klein <ul> vorkommt?
Da kommt doch nirgends ein ul vor (weder groß noch klein) oder war ein Tippfehler und Du meintest kein?
Ups... ich meinte natürlich kein. Aber mit cur.all.tags("UL")[0] wird eben versucht, auf eines zuzugreifen, was mit einer entsprechenden Fehlermeldung quitiert werden sollte.
Gruß,
Harlequin
Hallo,
Ups... ich meinte natürlich kein. Aber mit cur.all.tags("UL")[0] wird eben versucht, auf eines zuzugreifen, was mit einer entsprechenden Fehlermeldung quitiert werden sollte.
War auch nicht ganz ernst gemeint ;-) aber ich hab grad gesehen, dass ich selbst nicht richtig aufgepasst habe, weil ich nämlich davon ausging, dass für ie die erste Option (cur.nextSibling.nextSibling) zugewiesen werden würde.
Grüße
Michi
Ups... ich meinte natürlich kein. Aber mit cur.all.tags("UL")[0] wird eben versucht, auf eines zuzugreifen, was mit einer entsprechenden Fehlermeldung quitiert werden sollte.
Danke das wird wohl das Problem sein. Aber wie kann ich das abändern, das die JavaScript-Funktion für meine Tabelle funktioniert?
Ich würde nicht nachfragen, wenn ich nicht schon alles möglich versucht hätte. Ich bin leider noch ein Neuling in javaScript und verzweifel immer wieder.
Ich habe den orginal Quelltext gefunden. Da wird tatsächlich mit <UL> gearbeitet.
Wie kann ich nun die Funktion oder Tabelle abändern, damit der IE das richtig interpretiert?
Hier der orginal Quelltext (ersetzen durch die Tabelle):
<ul>
<li id="foldheader">News</li>
<ul id="foldinglist" style="display:none" style=&{head};>
<li><a href="http://www.cnn.com">CNN</a></li>
<li><a href="http://www.abcnews.com">ABC News</a></li>
<li><a href="http://www.news.bbc.co.uk">BBC News</a></li>
</ul>
<li id="foldheader">Webmaster</li>
<ul id="foldinglist" style="display:none" style=&{head};>
<li><a href="http://www.dynamicdrive.com">Dynamic Drive</a></li>
<li><a href="http://www.javascriptkit.com">JavaScript Kit</a></li>
<li><a href="http://www.freewarejava.com">Freewarejava.com</a></li>
</ul>
<li id="foldheader">Nested Example</li>
<ul id="foldinglist" style="display:none" style=&{head};>
<li><a href="http://www.dynamicdrive.com">outer 1</a></li>
<li><a href="http://www.dynamicdrive.com">outer 2</a></li>
<li id="foldheader">Nested</li>
<ul id="foldinglist" style="display:none" style=&{head};>
<li><a href="http://www.dynamicdrive.com">nested 1</a></li>
<li><a href="http://www.dynamicdrive.com">nested 2</a></li>
</ul>
<li><a href="http://www.dynamicdrive.com">outer 3</a></li>
<li><a href="http://www.dynamicdrive.com">outer 4</a></li>
</ul>
</ul>
Yerf!
Wie kann ich nun die Funktion oder Tabelle abändern, damit der IE das richtig interpretiert?
Hm, so ohne weiteres blick ich in dem Script grad nicht durch. Aber wenn dir IEs älter als 5.5 egal sind könntest du die Browserabfrage entfernen und den IE ebenfalls den Code für den Mozilla ausführen lassen.
Gruß,
Harlequin
Hm, so ohne weiteres blick ich in dem Script grad nicht durch. Aber wenn dir IEs älter als 5.5 egal sind könntest du die Browserabfrage entfernen und den IE ebenfalls den Code für den Mozilla ausführen lassen.
Ich bin leider noch nicht weiter gekommen. Wenn einer noch eine Idee hat, wäre ich sehr dankbar für.
Ich bin leider noch nicht weiter gekommen. Wenn einer noch eine Idee hat, wäre ich sehr dankbar für.
Struppi.
Hallo,
Im Mozilla klappt das Script ohne Probleme.
Kann mir evt. einer sagen warum IE das nicht macht bzw. falsch interpretiert?
Ja. Füge mal ein
alert(cur.nextSibling.nextSibling.nodeName);
vor
var foldercontent=ns6? cur.nextSibling.nextSibling : cur.all.tags("UL")[0];
ein und Du siehst warum.
Allerdings kann/will ich Dir das problem in dem "Wust-Code" nicht sauber lösen.
Aber es funktioniert wenn Du nach
var foldercontent=ns6? cur.nextSibling.nextSibling : cur.all.tags("UL")[0];
folgende Zeile einfügst:
if (cur.nextSibling.nextSibling.nodeName == "") foldercontent = document.getElementById("foldinglist");
(Allerdings musst Du dann evtl. mal darauf achten, dass Du einzelne Anweisungen mit ; beendest).
Viele Grüße
Michi
Hallo,
muss mich korrigieren:
Ja. Füge mal ein
alert(cur.nextSibling.nextSibling.nodeName);
vor
var foldercontent=ns6? cur.nextSibling.nextSibling : cur.all.tags("UL")[0];
ein und Du siehst warum.
muss korrekt lauten:
Ja. Füge mal ein
alert(cur.all.tags("UL")[0]);
vor
var foldercontent=ns6? cur.nextSibling.nextSibling : cur.all.tags("UL")[0];
ein und Du siehst warum.
(Falls Du nichts siehst, klicke mal doppelt auf das gelbe Rufezeichen in der Statuszeile.)
viele Grüße
Michi
function checkcontained(e)
{
var iscontained=0
cur=ns6? e.target : event.srcElement
du musst hier auch noch das Event Objekt des IEs ermitteln.
function checkcontained(e)
{
if(!e) e = window.event;
var iscontained=0
var cur= e.target || event.srcElement
i=0
Nie!
Globale variabeln sind sehr schelchter Stil und führen gern zu Fehlern.
Den Rest hab ich mir erstmal nicht angeschaut.
Struppi.