peterS.: Event-Handler zentral registrieren u. Funktionen übernehmen

Beitrag lesen

gruss Anja,

oh, wow, seid Ihr schnell! Danke, Cheatah und wahsaga, ich werde mir
mal die angegebenen Quellen zu Gemüte führen.

dies ist zur loesung Deines problems aber nicht unbedingt notwendig.
   sowohl die JavaScript- als auch die DOM-API stellen Dir robuste
   werkzeuge zur verfuegung.

Deinem beispiel mangelt es eigentlich nur an der w3c-DOM-methode
   [addEventListener] bzw. derem microsoftschen pendant [attachEvent]
   sowie einer event-auswertung innerhalb der den links hinzuzufuegenden
   methode.
   wenn Du Dich jetzt noch einiger array-iteratoren bedientest, kaeme
   die kernfunktion zur loesung Deines problems auf gerademal 18 Zeilen
   code in einer eleganten aussagekraeftigen schreibweise.

das folgende bsp. dient zur bekraeftigung des gerade gesagten - der
   letzte code-block registriert die hauptfunktion "addOnclickListener"
   auf den "onload"-event des [window]-objekts. "addOnclickListener"
   wiederum registriert auf allen links, deren target-attribut-wert
   gleich "_top" ist den von Dir frei zu gestaltenden "oncklick"-
   eventhandler "onclickHandler".

die ersten beiden Array-methoden stellen in allen browsern, die
   vefuegbarkeit der statischen methode [Array.filter] sowie die der
   array-methode [forEach] sicher - ACHTUNG CODE:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd">  
<html>  
  
  <head>  
    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">  
  
    <title>addOnclickListener.html</title>  
  
    <meta http-equiv="content-script-type" content="text/javascript">  
    <!--  
      fuer alle browser, die folgend verlinkte methoden (noch) nicht implementieren -  
      [link:http://developer.mozilla.org/en/docs/New_in_JavaScript_1.6#Array_extras]  
  
      bietet sich - ebenfalls verlinkt - hier eine der moeglichen alternativen an:  
      [link:http://www.pseliger.de/jsExtendedApi/jsApi.bundles.DOM.getters.js]  
    //--><!--  
    <script type="text/javascript" src="...[path].../jsApi.bundles.DOM.getters.js">//-->  
    <script type="text/javascript">
~~~~~~javascript
  
  
      if (typeof Array.prototype.forEach != "function") {  
  
        Array.prototype.forEach = function (fct, thisArr) {  
  
          if (typeof fct == "function") {  
            thisArr = ((thisArr && (typeof thisArr == "object") && (thisArr instanceof Array)) ? (thisArr) : (null));  
            var i, l = this.length;  
            for (i=0; i<l; ++i) {  
              fct.call(thisArr, this[i], i, this);  
            }  
          }  
        };  
      }  
      Array.filter = function (obj, fct) {  
  
        var arr = [];  
        if (typeof fct == "function") {  
          var i, l = (((obj instanceof Array) || ((typeof obj.length == "number") && ((typeof obj.item == "function") || (typeof obj.item == "object") || (typeof obj.item == "string") || (obj instanceof window.NodeList) || (obj instanceof window.HTMLCollection)))) ? (obj.length) : (0));  
          for (i=0; i<l; ++i) {  
            if (fct.call(null, (obj[i] || obj.item(i)), i, obj)) {  
              arr.push(obj[i] || obj.item(i));  
            }  
          }  
        }  
        return arr;  
      };  
  
  
      var onclickHandler = function (evtObj) {  
  
        evtObj = (window.event || evtObj); //  [MouseEvent]  
        var evtSrc = (evtObj.srcElement || evtObj.target); // [HTMLLinkElement]  
  
        alert("evtSrc - this object : " + evtSrc + "\nevtSrc.nodeName : " + evtSrc.nodeName + "\nevtSrc.id : " + evtSrc.id + "\n\nevtSrc.onclick: " + evtSrc.onclick);  
      };  
  
  
      var addOnclickListener = function () {  
  
        if (addOnclickListener.isInitialized) {return;} // check due to opera;  
        addOnclickListener.isInitialized = true;  
  
        Array.filter(document.links, (function (elm/*, idx, arr*/) {  
  
          return (elm.target == "_top");  
  
        })).forEach(function (elm/*, idx, arr*/) {  
  
          if (elm.addEventListener) {  
            elm.addEventListener("click", onclickHandler, false); // [false]-flag due to opera;  
          } else if (elm.attachEvent) {  
            elm.attachEvent("onclick", onclickHandler);  
          }  
        });  
      };  
  
  
      if (window.addEventListener) {  
        window.addEventListener("load", addOnclickListener, true);  
      } else if (window.attachEvent) {  
        window.attachEvent("onload", addOnclickListener);  
      }
~~~~~~html
  
  
    </script>  
  </head>  
  
  <body>  
    <ul>  
      <li><a href="#" target="_top" id="hubi1" onclick="this.id = 'gnn'; alert(this.id);">_top und JS</a></li>  
      <li><a href="#" target="_top" id="hubi2">_top</a></li>  
      <li><a href="#" target="_blank" id="hubi3">blank</a></li>  
    </ul>  
  </body>  
  
</html>

so long - peterS. - pseliger@gmx.net

--
»Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
ie:( fl:) br:> va:( ls:& fo:) rl:| n3;} n4:} ss:} de:µ js:} mo:? zu:]