susi: setAttribute('onclick' ..... );geht das?

guten tag,

ich habe ein script welches alle anchor ersetzt! bitte nicht fragen warum ich dies mache, weil es einfach sein muss! ;-) die methodik ist frei wählbar ...
ich bin auf folgendes gekommen ...

anchors= ContentPart.getElementsByTagName("a");
 for (var i = 0; i < anchors.length; i++)
 {
  anchors[i].onClick= function()
  {
   alert('hello link');
  }
  if(anchors[i].name=="_self")
  {
   temp_a= anchors[i].href;
   anchors[i].setAttribute("onClick", "alert('"+temp_a+"')");
   anchors[i].setAttribute("href", "javascript:void(0);");
   alert(anchors[i].outerHTML);
  }
 }

.....
laut alert mit outerHTML im IE funktioniert alles wunderbar!
nur .... wird die javascript funktion alert() die ich dem onclick attribute zuteile nicht aufgerufen wenn ich auf jenes klicke!

warum?
hat jemand eine antwort?

  1. anchors[i].onClick= function()

    {
       alert('hello link');
      }

    bitte diese zeilen nicht beachten!
    ich ahbe sie nur aus testzwecken eingefügt, was am resultat bzw. am misserfolg nichts ändert! ;-)

  2. Hi,

    anchors[i].onClick= function()

    nett, aber Link-Objekte kennen keine onClick-Eigenschaft. Meinst Du vielleicht die onclick-Eigenschaft?

    anchors[i].setAttribute("onClick", "alert('"+temp_a+"')");

    Das funktioniert zwar im Prinzip auch, nur versagt dabei ein vereinzelter Browser, der leider sehr viel öfter eingesetzt wird, als er oder wir es verdienen.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi,

      anchors[i].onClick= function()

      nett, aber Link-Objekte kennen keine onClick-Eigenschaft. Meinst Du vielleicht die onclick-Eigenschaft?

      anchors[i].setAttribute("onClick", "alert('"+temp_a+"')");

      Das funktioniert zwar im Prinzip auch, nur versagt dabei ein vereinzelter Browser, der leider sehr viel öfter eingesetzt wird, als er oder wir es verdienen.

      okay habs gerade in safari und FF getestet und es funkt wirklich ...
      IE natürlich nicht ...
      jedoch geht es mit

      anchors[i].setAttribute("href", "javascript:loadContent('"+temp_a+"'), window.status='"+temp_a+"'");

      1. Hi,

        anchors[i].onClick= function()
        nett, aber Link-Objekte kennen keine onClick-Eigenschaft. Meinst Du vielleicht die onclick-Eigenschaft?

        anchors[i].setAttribute("onClick", "alert('"+temp_a+"')");
        Das funktioniert zwar im Prinzip auch, nur versagt dabei ein vereinzelter Browser, der leider sehr viel öfter eingesetzt wird, als er oder wir es verdienen.
        okay habs gerade in safari und FF getestet und es funkt wirklich ...
        IE natürlich nicht ...

        von welchen der beiden oben genannten und höchstens(!)[1] in der Theorie identischen Methoden redest Du?

        Cheatah

        [1] Sehr, sehr höchstens. Mit einer Menge guten Willens, wenn man die onclick-Eigenschaft als direkte Abbildung des onclick-Attributs betrachtet. Ehrlich gesagt würde ich das aber nicht riskieren.

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
  3. Hallo,

    anchors= ContentPart.getElementsByTagName("a");
    for (var i = 0; i < anchors.length; i++)
    {
      anchors[i].onClick= function()
      {
       alert('hello link');
      }
      if(anchors[i].name=="_self")

    Ein a-Element mit name="_self", was soll das bedeuten?

    Mehrere a-Elemente mit demselben name-Attributwert sind übrigens nicht erlaubt. Suchst du vielleicht eine Klasse?

    {
       temp_a= anchors[i].href;
       anchors[i].setAttribute("onClick", "alert('"+temp_a+"')");
       anchors[i].setAttribute("href", "javascript:void(0);");

    Erst mal kannst du Event-Handler nicht so setzen wegem dem IE. Das Schema, an das du dich halten musst, ist:

    anchors[i].onclick = funktion;

    Zweitens, warum speicherst du den Wert der href-Eigenschaft überhaupt in einer Variable, um sie im Click-Handler auszugeben? Im Click-Handler kannst du auch direkt über »this« auf das geklickte a-Element zugreifen und so kommst du auch an die href-Eigenschaft:

    function klick () {  
       alert(this.href);  
       return false;  
    }  
    ...  
    anchors[i].onclick = klick;
    

    return false; bewirkt, dass der Browser nicht auch noch das href-Linkziel annavigiert, du musst also href nicht mit »javascript:void(0)« überschreiben.

    Darüber hinaus:

    Wenn der Handler gewisse Variablen braucht, die nicht über »this« erreichbar sind, erst dann könnte man auf die Idee kommen, eine variable Funktion als Handler zu setzen. Das ginge so:

    var parameter = "individuell";  
    anchors[i].onclick = new Function("alert('" + parameter + "')");
    

    Aber das ist eigentlich immer unnötig, denn man kann diese Variable einfach an das Elementobjekt anhängen und dann im Handler über this darauf zugreifen:

      
    function klick () {  
       alert(this.parameter);  
    }  
    ...  
    anchors[i].parameter = "individuell";  
    anchors[i].onclick = klick;
    

    Mathias