Browserproblem mit NS6

  • Habe fogendes Problem:


    Habe ein java-skript, dass layer im IE und im NS<=4 ohne Probleme ausführt... nur der NS6 eben nicht. Kann mir hier weiterhelfen?


    Hier folgendes Skript:


    var IE = (navigator.appName == "Microsoft Internet Explorer") ? 1 : 0;
    var NS = (navigator.appName == "Netscape") ? 1 : 0;
    var hideMenu = null;


    function Hide(div)
    {
    if(IE)eval('document.all.'+div+'.style.visibility="hidden"');
    if(NS)eval('document.layers.'+div+'.visibility="hidden"');
    }


    function Show(div)
    {
    if(IE) eval('document.all.'+div+'.style.visibility="visible"');
    if(NS) eval('document.layers.'+div+'.visibility="visible"');
    }


    function imgOn(Num)
    {
    hideAll();
    if (document.images)
    {
    document.images['b' +Num].src = eval("b" +Num+ "on.src")
    }
    }


    function imgOff(Num)
    {
    if (document.images)
    {
    document.images['b' +Num].src = eval("b" +Num+ ".src")
    }
    }


    //MenuMouseOver


    function mImgOn(divNum,Num)
    {
    clearTimeout(hideMenu);
    if (document.images)
    {
    if(IE)
    {
    document.images['m' +divNum+ 'b' +Num].src = eval("m" +divNum+ "b" +Num+ "on.src")
    }
    if(NS)
    {
    document.layers['m'+divNum].document.images['m' +divNum+ 'b' +Num].src = eval("m" +divNum+ "b" +Num+ "on.src")
    }
    }
    }


    function mImgOff(divNum,Num)
    {
    if (document.images)
    {
    if(IE)
    {
    document.images['m' +divNum+ 'b' +Num].src = eval("m" +divNum+ "b" +Num+ ".src")
    }
    if(NS)
    {
    document.layers['m'+divNum].document.images['m' +divNum+ 'b' +Num].src = eval("m" +divNum+ "b" +Num+ ".src")
    }
    }
    hideMenu=setTimeout('hideAll()',500)
    }


    // Sollte ein weiteres Untermenü hinzukommen, muss dies hier ergänzt werden!


    function hideAll()
    {
    Hide('m1');
    Hide('m2');
    Hide('m3');
    Hide('m4');
    Hide('m5');
    }



    [Edited by Rizzla on 06.04.01 at 12:28 GMT]

    Format C:

  • *grin*


    tja ja... das ist halt NN6 !! Bin auch schon auf das Problem gestoßen. Das W3C hat einen neuen Standart verabschiedet, mit dem man die Elemente... ich sag mal direkt ansprechen kann. Deine HIDE-Function müsste dann so aussehen:


    eval('document.getElementByID("'+div+'").style.visibility="hidden"');


    Nun siehst Du natürlich was NEU ist.. getElementByID, ist das Zauberwort. Das versteht der NN6 und der IE5 ! Tja entweder, du schreibst wieder für jeden Browser eine eigene Funktion, oder du fast alles bei der Browserprüfung zusammen...:



    if (document.all)
    {layerRef = 'document.all("';
    styleSwitch = '").style';}
    if (document.getElementById)
    {layerRef = 'document.getElementById("';
    styleSwitch = '").style';}
    if (document.layers)
    {layerRef = 'document.layers['';
    styleSwitch = '']';}


    function Hide(div){
    eval(layerRef+div+styleSwitch+'.visibility="hidden"');
    }


    ... so brauchst Du nicht für jeden Browser eine Teilfunktion schreiben...kannst dir also die IF-Abfragen in den einzelnen Funktionen sparen.
    Die Abfrage ist so auch am einfachsten, im Gegensatz zu "navigator.appName". Da hättest Du auch wieder Probleme, weil NN4.7 und NN6 ==>> Netscape sagen würden ;)


    ...Dat wars erstmal, ich muß weg !! Vielleicht hilfts Dir ja weiter.


    Gruß Jan





    [Edited by Stuck Mojo on 07.04.01 at 13:19 GMT]