• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Script läuft nicht unter Netscape & Mozilla...

Toxictype

New member
Das folgende JavaScript läuft nicht unter Netscape und Mozilla!

Kann mir bitte jemand sagen warum???

JS-Datei:
PHP:
<script>
<!-- 
var head="display:''"; 
img1=new Image() 
img1.src="" 
img2=new Image() 
img2.src="" 

var ns6=document.getElementById&&!document.all 
var ie4=document.all&&navigator.userAgent.indexOf("Opera")==-1 

function closemenu() { 
   for (var i=0; i < document.getElementsByName('foldinglist').length; i++) { 
    document.getElementsByName('foldinglist')[i].style.display="none"; 
   } 
} 

function checkcontained(e){ 
    var iscontained=0; 
    cur=ns6? e.target : event.srcElement; 
    i=0; 
    if (cur.id=="foldheader") iscontained=1; //zu 
    else while (ns6&&cur.parentNode||(ie4&&cur.parentElement)) { 
    if (cur.id=="foldheader"||cur.id=="foldinglist") { 
        iscontained=(cur.id=="foldheader")? 1 : 0 // original 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"){ 
    closemenu(); 
        foldercontent.style.display=""; 
        cur.style.listStyleImage=""; 
    } else { 
        foldercontent.style.display="none"; 
        cur.style.listStyleImage=""; 
    } 
    } 
} 

if (ie4||ns6) document.onclick=checkcontained; 

//-> 
</script>

Seiteninhalt:
PHP:
...
<ul id="navigation">
  <li id="foldheader">
    <a href="template.php" onClick="closemenu()" target="content">main_1</a>
  </li>
<ul id="foldinglist" name="foldinglist" style="display: none">
  <li>
    <a href="template_2.php" target="content">sub_1</a>
    <a href="template_3.php" target="content">sub_2</a>
  </li>
</ul>
</ul>
 
Moin!

Was soll das script Deiner Meinung nach tun (und: in welchem Browser tut es das bereits)?

Ahoi - Pit
 
Hi Pit-r und thx für Dein Erbarmen! ;)

Das Script läuft unter IE.
Dort öffnet es Sublinks, wenn man auf den entsprechenden mainlink klickt, also quasi ein Untermenu.
Etwa so:

mainlink1
- sublink1
- sublink2
mainlink2
mainlink3

etc.

Wenn ich im NS oder Mozilla auf einen mainlink klicke, werden nicht die sublinks angezeigt, sondern der folgende mainlink wird "geschluckt"!
 
Hi!

Kannst ja mal hiermit ein wenig rumspielen:
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Beispiel</title>
<script type="text/javascript">
<!--
var ie4=typeof(document.all)=='object';
var ns6=document.getElementById&&!ie4;
function closemenu() {
lists=document.getElementsByTagName('ul')
for (var i=0; i < lists.length; i++) {
if(lists[i].id.indexOf("foldinglist")>-1)lists[i].style.display="none";
}
}
function checkcontained(e){
var iscontained=0;
if(!e)e=window.event;
cur=e.target? e.target : e.srcElement;
i=0;
if (cur.id.indexOf("foldheader")>-1) iscontained=1;
else while (ns6&&cur.parentNode||(ie4&&cur.parentElement)) {
if (cur.id.indexOf("foldheader")>-1||cur.id.indexOf("foldinglist")>-1) {
iscontained=(cur.id.indexOf("foldheader")>-1)? 1 : 0;
break;
}
cur=cur.parentNode? 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="";
cur.style.listStyleImage="";
}
else {
foldercontent.style.display="none";
cur.style.listStyleImage="";
}
}
}
document.onclick=checkcontained; 
//-->
</script>
</head>
<body>
<ul id="navigation">
<li id="foldheader1">
<a href="template.php" onClick="closemenu()" target="content">main_1</a>
</li>
<ul id="foldinglist1" style="display: none">
<li>
<a href="template_2.php" target="content">sub_1</a>
<a href="template_3.php" target="content">sub_2</a>
</li>
</ul>
<li id="foldheader2">
<a href="template.php" onClick="closemenu()" target="content">main_2</a>
</li>
<ul id="foldinglist2" style="display: none">
<li>
<a href="template_2.php" target="content">sub_2_1</a>
<a href="template_3.php" target="content">sub_2_2</a>
</li>
</ul>
</ul>
</body>
</html>
Ahoi - Pit
 
Ahoi Pit und danke für Deine Mühe!!!

Läuft es bei Dir?
Bei mir leider nicht ( in NS und Mozilla )!

Ich versteh dat ganze nicht!!!!


MMMMMOOOOOOOOOOOOOOOOOOOMMMMMENT!!!!!!!!!!!!!!!!!!!
 
Zuletzt bearbeitet:
JAAAAAAAAAAAAAAAAAAAAAAAAAAAA!!!!!!!!!!!! :D :love: :whacky: :amazed:

ES LLLLLLLÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄUUUFFFFFFFFFFFFTTTT !!!!!!!!!! :p :whacky:


Pit, ich danke Dir!!!

Wohin möchtest Du den Kuß haben?
 
Hi Pit,

nachdem ich den Screen wieder gesäubert habe, ist mit etwas aufgefallen!!!

Würde mich freuen, wenn Du dir mal den folgenden diesen Link ansehen kannst:

Die Links 1 - 3 beinhalten keine Untermenus!
Wenn man im Mozilla (im IE löppts) auf einen dieser Links klickt, wird der nachfolgende Link immer noch "geschluckt"!

Hast Du eine Ahnung warum das so ist???

Gruß

Tox
 
Also mal abgesehen davon, daß Du "illegalerweise" schon wieder identische id's vergibst (das hatte ich geändert, daher auch 'indexOf...' anstelle von '==' beim checken der id's) wirst Du das Problem los, wenn Du den li-Tags ohne Kinderchen eine id mit 'foldinglist' verpaßt.

Ahoi - Pit
 
Manno super!!!
Das ist es!
Nochmals vielen Dank!

Ich lasse das Menu dynamsich erstellen.
Daher ist es einfacher dieselben ids zu nehmen, finde ich!

Wenn es den Ablauf nicht weiter beeinflusst, würde ich es gerne so lassen!

Also, ich hoffe, ich bekomme es jetzt hin! ;-)
 
Keine Ursache.

Bei der Art Referenzierung stört es nicht, daß die id's identisch sind - das ist aber nicht zulässig. Was ist dabei, dynamisch erstellte Menü-Elemente mit individuellen id's zu versehen?

Gruß - Pit
 
Naja, weil ich schon lange an dieder Sache kämpfe, alles so läuft wie es ist (fast alles ,-) und ich es lieber so lassen möchte!

Ich habe das statisch erstellte Menu (test_2) und das dynamisch erstellte (hier aber übernommen und verstatischt ;-) ) noch mal unter diesem Link eingestellt!

Funzt wunderbar!

Wenn ich den Code allerdings dynamisch erstellen lasse, gibt es Probleme, obwohl der dynamische mit dem statischen identisch ist.

Hast Du manchmal auch einfach die Schnauze voll??? :(

Gruß
Tox
 
AAAAAAAAAAAAAAAAAAAAHHHHHHHHHHHHHHHHHHHHH!!!!! :mad: :whacky: :confused: :whacky:

Ich drehe noch durch!!!

Warum müssen diese beschissenen Browser alle anders sein!

Fuck Gates und alle anderen!!!

Sorry, dass mußte raus!!!
 
Toxictype schrieb:
Hast Du manchmal auch einfach die Schnauze voll??? :(
Na klar - momentan ist Pizza drin. Aber das gilt natürlich auch oft genug im übertragenen Sinn (wenn auch vielleicht nicht so sehr wie bei Dir gerade).

Nur mal so interessehalber: hast Du das Originalscript selbst gebastelt? Und inwieweit bist Du fit bezüglich der DOM-nodes auf denen der Part für Nicht-IE basiert?

Der dynamisch erzeugte Kram ist nicht identisch mit den beiden anderen Varianten - kuck mal ganz genau hin.

Gruß - Pit
 
Hi, essen müßte ich auch mal... ;-)

Ich muß gerade Java lernen obwohl ich mich viel lieber mit JS beschäftigen würde.
Ich hoffe, dass kommt noch!

Das Skript habe ich mit sehr großer Hilfe von Microkotz so hinbekommen!
Was meinst Du genau mit DOM-Nodes?

Der dynamisch erzeugte Kram ist nicht identisch mit den beiden anderen Varianten - kuck mal ganz genau hin.

Meinst Du den abschließenden ul-Tag?
 
Toxictype schrieb:
Meinst Du den abschließenden ul-Tag?
Nee nich wirklich, obwohl man ja brav alle geöffneten Tags zumachen sollte. Das hier basiert auf dem was Du mir pn-t hast:
PHP:
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="http://www.bohlen-doyen.com/neu/css/bohlen_doyen_ns.css" rel="stylesheet" type="text/css">
<script type="text/javascript">
<!--
var ie4=typeof(document.all)=='object'; 
var ns6=document.getElementById&&!ie4; 
function closemenu() { 
lists=document.getElementsByTagName('ul') 
for (var i=0; i < lists.length; i++) { 
if(lists[i].id.indexOf("foldinglist")>-1)lists[i].style.display="none"; 
} 
} 
function checkcontained(e){ 
var iscontained=0; 
if(!e)e=window.event; 
cur=e.target? e.target : e.srcElement; 
i=0; 
if (cur.id.indexOf("foldheader")>-1) iscontained=1; 
else while (ns6&&cur.parentNode||(ie4&&cur.parentElement)) { 
if (cur.id.indexOf("foldheader")>-1||cur.id.indexOf("foldinglist")>-1) { 
iscontained=(cur.id.indexOf("foldheader")>-1)? 1 : 0; 
break; 
} 
cur=cur.parentNode? cur.parentNode : cur.parentElement; 
} 
if (iscontained){ 
var foldercontent=ns6? cur.nextSibling.nextSibling : cur.all.tags("UL")[0] 
alert('Nodename von cur.nextSibling.nextSibling: '+ foldercontent.nodeName+'\nNodename von cur.nextSibling: '+ cur.nextSibling.nodeName)
if (foldercontent.style.display=="none"){ 
foldercontent.style.display=""; 
cur.style.listStyleImage=""; 
} 
else { 
foldercontent.style.display="none"; 
cur.style.listStyleImage=""; 
} 
} 
} 
document.onclick=checkcontained; 
-->
</script>
</head>

<body>
ab hier das dynamische Menu

      <ul id="navigation">
      <li id="foldinglist">
<a href="#" onClick="closemenu()">Wir über uns</a>

</li><li id="foldinglist">
<a href="#" onClick="closemenu()">Hafendienstleistungen</a>
</li><li id="foldinglist">
<a href="#" onClick="closemenu()">Seekabelverlegung</a>
</li><li id="foldheader">
<a href="#" onClick="closemenu()">Schiffe</a>
</li><ul id="foldinglist" style="display: none">

<li><a href="#">- MS Manta</a><br><a href="#">- MS Bodo Mariner</a><br><a href="#">- CS Arcos</a><br></li>
</ul><li id="foldheader">
<a href="#" onClick="closemenu()">Beteiligungen</a>
</li><ul id="foldinglist" style="display: none">
<li><a href="#">- Seevermessung</a><br><a href="#">- Offshore-Windenergie-  Projekte</a><br></li>

</ul></ul>
<p>
ab hier test_2 (nach Verbesserung von Pit)

<ul id="navigation">

<li id="foldinglist">
<a href="#" onClick="closemenu()">Wir über uns</a>
</li>

<li id="foldinglist">

<a href="#" onClick="closemenu()">Hafendienstleistungen</a>
</li>

<li id="foldinglist">
<a href="#" onClick="closemenu()">Seekabelverlegung</a>
</li>

<li id="foldheader">
<a href="#" onClick="closemenu()">Schiffe</a>

</li>
<ul id="foldinglist" style="display: none">
<li>
<a href="#">- MS Manta</a><br>
<a href="#">- MS Bodo Mariner</a><br>
<a href="#">- CS Arcos</a><br>
</li>

</ul>

<li id="foldheader">
<a href="#" onClick="closemenu()">Beteiligungen</a>
</li>
<ul id="foldinglist" style="display: none">
<li>
<a href="#">- Seevermessung</a><br>
<a href="#">- Offshore-Windenergie-  Projekte</a><br>

</li>
</ul> 
</ul>
</body>
</html>
Spiel damit mal in Fifo rum (nicht in IE - ist nur für Dich zum Debuggen). Das mittlere hab ich rausgelassen. Ist also oben dynamisch und unten "Pit". Klick mal oben und unten auf eins der Schätzchen mit Untermenüs und beachte den Unterschied.

Bei dem dynamischen wäre die Lösung, nicht:
var foldercontent=ns6? cur.nextSibling.nextSibling : cur.all.tags("UL")[0]
zu sagen sondern:
var foldercontent=ns6? cur.nextSibling : cur.all.tags("UL")[0]

Fifo erkennt selbst einen Zeilenumbruch im Quelltext als Textnode (IE nicht) - Du hast dadurch eine "Verschiebung" in der Knotenhierarchie bzw. -reihenfolge.

Hoffe, das hilft.

Greetz - Pit (und: iß was!!! :D)
 
Hi Pit,

ich habe mich die ganze Zeit mit den dem Code auseinander gesetzt um zu verstehen,
was Du machst!

Ehrlich gesagt ist mir das nicht ganz gelungen! Aber selbst ich werde das alles bald verstehen.
Hoffe ich zumindest! ;-)

Eins steht fest:
Ohne Deine Hilfe wäre ich nicht soweit gekommen!

Fifo erkennt selbst einen Zeilenumbruch im Quelltext als Textnode (IE nicht) - Du hast dadurch eine "Verschiebung" in der Knotenhierarchie bzw. -reihenfolge.

Ich denke, es lag daran, dass einige Links 'geschluckt' wurden!

Jetzt esse ich erstmal etwas! ;)

Gruß
Tox
 
Hi!

Der deal ist: wenn Du zwischen den HTML-Tags keine "Lücken" (textnodes bestehend aus Leerzeichen, Tabs, Zeilenumbrüchen) hast, funzt das script nicht mit der 'nextSibling.nextSibling' Geschichte. Du greifst dann auf's falsche Element zu. Entweder Du paßt Dein HTML an ("Lücken" mit erzeugen bei dem Dynamikkram) oder das script, indem Du nur auf 'cur.nextSibling' zugreifst.

Guten Hunger! Pit
 
Zurück
Oben