TommyR: Netscape-spez. Funktion?

Grüssle Leutz,
ich hab mal ein kleines problemschen und zwar müsste ich wissen ob es für Netscape eine Funktion gibt, die mir das aktuelle aktive HTML-Element zurück gibt.. (wie beim MSIE die Funktion "event.srcElement")

und mein zweites Problem ist:
ich möchte (falls es eine wie o.g. Funktion nicht gibt) ein Skript so aufrufen..

[script]
for(j=0; j < document.getElementsByTagName("a").length; j++) {
 link = document.getElementsByTagName("a");
 link[j].onmouseover = fadeIn_ns;
 link[j].onmouseout = fadeOut_ns;
}
[/script]

allerdings muss ich den Funktionen fadeIn_ns und fadeOut_ns jeweils eine Variable mit übergeben.. wie kann ich das realisieren?

MfG
Tommy

  1. Hi,

    ich hab mal ein kleines problemschen und zwar müsste ich wissen ob es für Netscape eine Funktion gibt, die mir das aktuelle aktive HTML-Element zurück gibt.. (wie beim MSIE die Funktion "event.srcElement")

    im MSIE ist es document.activeElement
    event.srcElement steht nur bei Events zur Verfügung.
    Nach DOM ist es
    e.currentTarget oder
    e.target
    wobei e das event-objekt ist, das der Funktion implizit übergeben wurde.
    musste mal ausprobieren

    ich machs immer so:

    function beispiel(ev)
    {
       var e = (ev) ? ev : event;
       alert(this.tagName); // z.B. "A"
    }

    das aktuelle Objekt (das diese Funktion aufruft) kannst du auch einfach mit "this" ansprechen. dann brauchst du auch keine Fallunterscheidung, und auch kein srcElement.

    dann haste in e sowohl das MSIE-Event-Objekt als auch das DOM event objekt.

    [script]
    for(j=0; j < document.getElementsByTagName("a").length; j++) {
     link = document.getElementsByTagName("a");
     link[j].onmouseover = fadeIn_ns;
     link[j].onmouseout = fadeOut_ns;
    }
    [/script]

    nimm vielleicht lieber document.links, das findet nur die <a> mit href=""
    (das soll wohl hier gemeint sein) und läuft dann auch unter NS 4.

    eine Variable kannst du zwar nicht übergeben, aber du kannst sie als eigenschaft ans Objekt hängen. so mach ich das immer.

    machs so:

    for(j=0; j < document.links.length; j++) {
      document.links[j].meineEigenschaft = "Parameter";
      document.links[j].onmouseover = fadeIn_ns;
      document.links[j].onmouseout = fadeOut_ns;
    }

    function fadeIn_ns(e)
    {
      var e = (ev) ? ev : event;
      alert(this.meineEigenschaft); // --> "Parameter"
      // ...
    }

    Gruß
    Christian

    1. Danke ^_^ hat geklappt

      MfG Tommy

  2. Weis jemand warum mein FadeScript unter Netscape nicht richtig Funktioniert?? (Unter NS und OP funktioniert es nur wenn ich HTML 4.0 verwende.. allerdings basiert meine Page auf XHTML 1.0 Trans.) d.h.: ich muss DOCTYPEDEF und DOCTYPEDEC weglasse und es funktionier.. aber nicht mit den Angaben..

    [script]
    /* Diese Farben sind für Netscape und Opera, da diese die deHexize-Funktion nicht unterstuetzen */
    //priFade
    colors = new Array("ffffff", "D2CFC2", "B2AE97", "999476", "827C56", "70693F", "5E5626", "5E5626", "70693F", "827C56", "999476", "B2AE97", "D2CFC2", "ffffff")
    //secFade
    altColors = new Array();

    /* MSIE Farben... */
    fadeInColor = "#5E5626";  //priFade
    fadeOutColor = "#ffffff"; //priFade
    altInColor = "";          //secFade
    altOutColor = "";         //secFade

    /* Variablen ersetzen */
    //fadeInColor = dehexize(fadeInColor.toLowerCase());
    //fadeOutColor = dehexize(fadeOutColor.toLowerCase());
    //altInColor = dehexize(white_fadeColor.toLowerCase());
    //altOutColor = dehexize(white_outColor.toLowerCase());

    /* Farb-Details festlegen */
    speed = 100;
    stepIn = colors.length * 2; //def. 35
    stepOut = colors.length * 2; //def. 35

    /* sonst. Variablen */
    var brwsr;
    var fadeId = new Array();
    var elementDoc, elementTag, elementClass, elementUID;
    var timerID;
    autofade = 1;
    colorNum =0;
    var obj;

    /* Event-Handler */
    //document.onmouseover = fadeIn_ns;
    //document.onmouseout = fadeOut_ns;

    /* welcher Browser? MSIE? NS/MOZ? OP? LYNX? KONQUEROR? */
    function detectBrowser() {
       browserName = navigator.appName;
       browserVers = navigator.appVersion;
       browserInfo = navigator.userAgent.toLowerCase();
     if (browserInfo.indexOf("opera") == -1 && browserName=="Microsoft Internet Explorer") {
          brwsr = "MSIE"; //Internet Explorer
     } else {
      if (browserInfo.indexOf("opera") != -1) {
          brwsr = "OP"; //Opera
      } else {
       if ((browserInfo.indexOf("mozilla") != -1) && ((browserInfo.indexOf('spoofer') == -1) && (browserInfo.indexOf('compatible') == -1))) {
          brwsr = "MOZ"; //Mozilla und Netscape
       } else {
        if (browserName=="Konqueror") {
          brwsr = "kon"; //Konqueror
        } else {
          brwsr = "lynx"; //Lynx oder andere???
        }
       }
      }
     }
    }

    function fade_ns(xmp) {

    obj = xmp;

    if (autofade==1) {
      if (colorNum<=colors.length-1) {
       obj.style.color=colors[colorNum];
       colorNum++
       timerID = setTimeout("fade_ns(obj)", speed);
      } else {
       colorNum = 0;
       timerID = setTimeout("fade_ns(obj)", speed);
      }
     } else {
      clearTimeout(timerID);
     }

    }

    function fadeIn_ns() {

    clearTimeout(timerID);

    autofade = 1;
      fade_ns(this);
    }

    function fadeOut_ns() {

    clearTimeout(timerID);

    this.style.color = fadeOutColor;
      autofade = 0;
    }
    [/script]

    [script]
    //<!--
     //<![CDATA[
    for(j=0; j < document.getElementsByTagName("a").length; j++) {
     link = document.getElementsByTagName("a");
     link[j].onmouseover = fadeIn_ns;
     link[j].onmouseout = fadeOut_ns;
    }
     //]]>
    //-->
    [/script]

    1. Weis jemand warum mein FadeScript unter Netscape nicht richtig Funktioniert??

      Das kenn ich. du musst bei XHTML sehr korrekt schreiben.
      z.B. darfst du nicht schreiben:

      element.style.top = 50;

      sondern:

      element.style.top = "50px";
      (würde allerdings nicht unter Opera 5 und soweit ich weiß auch nicht unter IE 4 funzen, da diese da immer einen reinen Integer haben wollen).

      ich vermute in deinem Skript ist es die Farbangabe:

      obj.style.color=colors[colorNum];

      das "#"-Zeichen fehlt! und muss nach den Standarddefinitionen nunmal da hin!
      versuchs mal mit:

      obj.style.color="#"+colors[colorNum];

      Gruß
      Christian

      1. Jo danke, auch das hat gefuntzt..
        man bin ich schlecht.. *peinlich*

        MfG Tommy