Tobias: Netscape positioniert ohne mausposition zu berücksichtigen

Hi!
ich bastle grade an einem Menü, bei dem on click auf einen einfachen hyperlink ein submenü darunter erscheinen soll. Habe es von Dynamic Drive. Ist eigentlich keine große Sache, aber es macht mir in Netscape/Mozilla/Firefox echten Ärger...
Netscape baut jedes submenü auf position 0/0 auf, anstatt relativ unter dem Hauptmenüpunkt.
IE macht es jedoch richtig.
bin ziemlich sicher, es liegt an der Art, wie die Position im Javascript gemessen wird.
Hier der teil des codes der index.html:

<script language="JavaScript1.2">

var zindex=100
var ns4=document.layers
var ns6=document.getElementById&&!document.all
var ie4=document.all
var opr=navigator.userAgent.indexOf("Opera")

function dropit(e,whichone){
curmenuID=ns6? document.getElementById(whichone).id : eval(whichone).id
if (window.themenu&&themenu.id!=curmenuID)
themenuStyle.visibility=ns4?"hide" : "hidden"

themenu=ns6? document.getElementById(whichone): eval(whichone)
themenuStyle=(ns6||ie4)? themenu.style : themenu

themenuoffsetX=(ie4&&opr==-1)? document.body.scrollLeft : 0
themenuoffsetY=(ie4&&opr==-1)? document.body.scrollTop : 0

themenuStyle.left=ns6||ns4? e.pageX-e.layerX : themenuoffsetX+event.clientX-event.offsetX
themenuStyle.top=ns6||ns4? e.pageY-e.layerY+19 : themenuoffsetY+event.clientY-event.offsetY+20

<!-- KOMMENTAR: Ich denke, daß in den 2 Abschnitten hier drüber das Problem liegt.
-->

hiddenconst=(ns6||ie4)? "hidden" : "hide"
if (themenuStyle.visibility==hiddenconst){
themenuStyle.visibility=(ns6||ie4)? "visible" : "show"
themenuStyle.zIndex=zindex++
}
else
hidemenu()
return false
}

function hidemenu(){
if ((ie4||ns6)&&window.themenu)
themenuStyle.visibility="hidden"
else if (ns4)
themenu.visibility="hide"
}

if (ie4||ns6)
document.onclick=hidemenu

</script>

Wäre echt nett wenn sich mal jemand die Mühe macht mir da auf die Sprünge zu helfen. Bin mit meinen Javascript-Kenntnissen am Ende.
Für mich ist der Code absolut ok... Sehe Fehler einfach nicht!

Vielen Dank für eure Mühe!
Tobias

  1. Hi,

    themenuStyle.left=ns6||ns4? e.pageX-e.layerX : themenuoffsetX+event.clientX-event.offsetX

    left erfordert die Angabe einer Länge (Zahl plus Einheit), nicht eine Zahl.

    cu,
    Andreas

    --
    MudGuard? Siehe http://www.Mud-Guard.de/
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hi Andreas!
      Danke für die Antwort!
      Ich verstehe aber nicht ganz. Wo genau in dieser Zeile setze ich denn wie eine Einheit fest?

      Tobias

      1. hi,

        Ich verstehe aber nicht ganz. Wo genau in dieser Zeile setze ich denn wie eine Einheit fest?

        du weisst der CSS-eigenschaft left per javascript einen wert zu - also musst du noch eine einheit angeben, da du dir aus e.pageX-e.layerX bzw. themenuoffsetX+event.clientX-event.offsetX vermutlich nur die reinen werte holen kannst (mal mit alert überprüfen ist immer gut).
        also sorge dafür, das noch eine einheit, z.b. px, hinten dran gehängt wird (natürlich _vor_ der zuweisung an die CSS-eigenschaft). das ist eine simple string-operation.

        gruss,
        wahsaga

        1. Habe den Fehler jetzt ...
          Es liegt nicht am script! Liegt an meinem doctype!
          Sorry, mein Fehler!

          1. Hi,

            Es liegt nicht am script! Liegt an meinem doctype!

            Wenn Du damit meinst, daß das Script mit korrektem Doctype _nicht_ läuft, dann liegt der Fehler eindeutig beim Script. Sicherlich kannst Du dann den Doctype weglassen oder kürzen, aber irgendwann wird der QuirksMode der Browser die Fehler im Script nicht mehr tolerieren.

            freundliche Grüße
            Ingo

            1. Hi!
              Hab meine seite jetzt mal durch validator & css-validator gejagt um fehler auszubügeln. bin zwar jetzt einige los, script läuft aber immer noch nicht.
              Ihr hattet malwieder recht! Mozillas Quirks Mode wäre die einzige (nicht akzeptable) variante, das script am laufen zu halten!
              Ich bin leider echt nicht gut genug informiert, um die fehler bzw. die veralteten befehle zu erkennen.
              Könnt ihr mir eine seite empfehlen, wo man dies klar & deutlich nachlesen kann, wann welcher Befehl als deprecated eingestuft wurde & durch was man ihn ersetzt?
              Ich weiß, ich frage ganz schön viel von euch, aber ohne euch komme ich hier nicht mehr weiter.
              Das Script (falls einer sich es mal im ganzne angucken will) findet ihr auf Dynamic Drive unter:

              http://www.dynamicdrive.com/dynamicindex1/dropmenuindex.htm

              Ich weiß nicht warum diese Script-Libraries Scripts anbieten, die absolut veraltet sind.
              Habe die anderen Threads zu veralteten Menu-Scripts großteils schon gelesen, aber keine hilfreiche Info in ihnen gefunden!
              Vielen Dank für eure Mühe!
              Tobias

              1. Hi,

                Ich bin leider echt nicht gut genug informiert, um die fehler bzw. die veralteten befehle zu erkennen.

                veraltet bzw. browserspezifisch sind document.layers (nur für nn 4 erforderlich) und document.all (nur für IE 4 erforderlich). Das entsprechende document.getElementById entspricht den Empfehlungen des W3C und wird von allen einigermaßen zeitgemäßen Browsern unterstützt.

                Was bei dem Script aber vermutlich noch hinzukommt, sind nicht berücksichtigte Fehler (des IE) bei dem Box-Modell, was dann dazu führt, daß die Anzeige im quirks mode ok ist, aber im standards-compliant mode beim IE 6 dann nicht mehr.
                Wenn Du Dich nun wirklich wenig auskennst, würde ich lieber ein aktuelleres Script (das nach Möglichkeit auch eine javascript-unabhängige Alternative besitzt) suchen oder vielleicht doch überlegen, ob eine einfache Navigation mit Übersichtsseiten für die Subnavigation nicht auch ginge - sinnvoller wäre sie zu 99% ohnehin.

                freundliche Grüße
                Ingo

          2. Hi,

            Habe den Fehler jetzt ...
            Es liegt nicht am script!

            Doch, er liegt im Script.

            Liegt an meinem doctype!

            nein - nur bei gewissen doctypes wird er in ein paar Browsern von deren Fehlerkorrektur ausgebügelt.
            Darauf solltest Du Dich keinesfalls verlassen.

            cu,
            Andreas

            --
            MudGuard? Siehe http://www.Mud-Guard.de/
            Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.