skiddo: OnClick feuert nicht

Guten Abend,

Ich habe ein kleines Problem.

Ich versuche über einen Ajax-Request JSON Daten per Callbackfunktion zu formatieren, was auch alles super klappt.

Nun stehe ich vor einem kleinen Problem. Ein Teil dieser Daten wird in <div>s gesetzt, die untereinander liegen. In der fertigen Version sollen diese dann anklickbar sein und eine JS Funktion auslösen.

Ich habe alles mögliche probiert, von geniererten id's und einer for-Schleife mit der ich über document.getElementById(generierteIDs).onClick die Funktion abschieße über den href="javascript: funktion(bla,bla)" bis zu anderen wahnwitzigen Gehirnergüssen.

Das mit dem href="javascript: funktion(bla,bla)" funktioniert, das heißt die Funktion läuft. allerdings ist das die schlechteste Option, ich würde gerne den ganzen Div anklickbar haben.

Meiner Meinung nach müsste rein logisch das hier funktionieren:

  
for(i = 1; i < JSON.wert.length; i++)  
{  
  ausgabe = "<div id=\"id\" onClick=\"funktion('" + JSON.wert[i].id + "');\"></div>";  
}  
document.GetElementById('ausgabe').innerHTML = ausgabe;  

(unnötigen Code habe ich weggelassen)

Nur leider tut es das nicht :(

Ich wäre über Hilfe erfreut.

Danke, Skiddo

  1. [latex]Mae  govannen![/latex]

    document.GetElementById('ausgabe').innerHTML = ausgabe;

    Es gibt keine Methode GetElementById unter document. Du meinst getElementById

    Cü,

    Kai

    --
    A workaround for an avoidable problem often adds clutter and overhead to the program which
    could have been avoided by not creating the problem in the first place.(Garrett Smith/clj)
    Foren-Stylesheet Site Selfzeug JS-Lookup
    SelfCode: sh:( fo:| ch:? rl:( br:< n4:( ie:{ mo:| va:) js:| de:> zu:) fl:( ss:| ls:?
    1. Es gibt keine Methode GetElementById unter document. Du meinst getElementById

      Da liegt der Fehler aber nicht, da habe ich mich nur hier im Forum verschrieben :)

      Nur zur Info, die Daten werden komplett formatiert ausgegeben und die Funktion die ich aufrufen will lässt sich über Friebug und die angesprochene href="javascript:.." Methode auch aufrufen. Das einzige was nicht klappt ist der onClick Event im <div>.

      Gruß, skiddo

      1. Hi,

        Da liegt der Fehler aber nicht, da habe ich mich nur hier im Forum verschrieben :)

        wie sollen wir Dir Probleme in einem Code analysieren, wenn Du uns einen völlig anderen lieferst? Arbeite mit Copy&Paste. Minimiere *vorher* den Code auf dasjenige Minimum, welches zum Nachvollziehen des Problems nötig ist.

        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,

          Da liegt der Fehler aber nicht, da habe ich mich nur hier im Forum verschrieben :)

          wie sollen wir Dir Probleme in einem Code analysieren, wenn Du uns einen völlig anderen lieferst? Arbeite mit Copy&Paste. Minimiere *vorher* den Code auf dasjenige Minimum, welches zum Nachvollziehen des Problems nötig ist.

          Cheatah

          Nochmal. Es geht mir nicht darum, das ihr meinen Code korrigiert, sondern das ihr mir helft eine Methode zu finden mit der ich das oben beschriebene Problem lösen kann. Denn so wie ich es da habe funktioniert es nicht, es ist nur dafür da, damit ihr versteht wie ich die Daten zum verarbeiten bekomme.

          Der Rest des Codes ist für mein Problem vollkommen irrelevant, es sein denn du würdest gerne die ellenlange Routine sehen mit der ich meine Daten formatiere..

          Aber Danke für die netten Tipps, nur verseteh ich nicht, was dieses "Copy&Paste" ist, wovon du sprichst.

          In diesem Sinne,
          Grüße

          1. Cheatah

            Bitte zitiere nur das worauf du antworten möchtest, Danke.

            Nochmal. Es geht mir nicht darum, das ihr meinen Code korrigiert, sondern das ihr mir helft eine Methode zu finden mit der ich das oben beschriebene Problem lösen kann. Denn so wie ich es da habe funktioniert es nicht, es ist nur dafür da, damit ihr versteht wie ich die Daten zum verarbeiten bekomme.

            Wir verstehen aber nicht was du falsch machst. Denn ein Event läßt sich ohne Probleme mit z.b. onclick dem Objekt zuweisen.

            Der Rest des Codes ist für mein Problem vollkommen irrelevant, es sein denn du würdest gerne die ellenlange Routine sehen mit der ich meine Daten formatiere..

            Deshalb sprach Cheatah auch davon, dass du den Code auf das relevante minimieren solltest.

            Aber Danke für die netten Tipps, nur verseteh ich nicht, was dieses "Copy&Paste" ist, wovon du sprichst.

            Eine Grundlage bei der arbeite mit grafischen System. Kann man sicher auch googlen.

            Struppi.

  2. Hallo skiddo,

    lang ist überflüssig, type="text/javascript" fehlt.

    for(i = 1; i < JSON.wert.length; i++)

    willst du das erste Element wirklich überspringen?

    {
      ausgabe = "<div id="id" onClick="funktion('" + JSON.wert[i].id + "');"></div>";

    hier wird in jedem Durchlauf der vorherige Wert überschrieben.

    }
    document.GetElementById('ausgabe').innerHTML = ausgabe;

      
    ich bin mir jetzt nicht ganz sicher, aber ich glaube, dass bei innerHTML die Eventhandler nicht gesetzt werden. Die Experten mögen mich korrigieren.  
    Ich würde hier mit createElement und appendChild arbeiten:  
      
    ~~~javascript
      var d = document.createElement("div");  
      d.id = "id"+i;  // IDs müssen eindeutig sein  
      d.nr = i;  
      d.onclick = function() { funktion(JSON.wert[this.nr].id) } ;  
      document.getElementById('ausgabe').appendChild(d);  
    
    

    Das ist jetzt ungetestet.

    Gruß, Jürgen

    1. Hi Jürgen,

      lang ist überflüssig, type="text/javascript" fehlt.

      ist weiter oben gesetzt

      willst du das erste Element wirklich überspringen?

      Ja. Im JsonArray steht vorher nur eine Überprüfung.

      ich bin mir jetzt nicht ganz sicher, aber ich glaube, dass bei innerHTML die Eventhandler nicht gesetzt werden. Die Experten mögen mich korrigieren.

      Das habe ich mir nämlich gedacht.

      Ich würde hier mit createElement und appendChild arbeiten:

      var d = document.createElement("div");

      d.id = "id"+i;  // IDs müssen eindeutig sein
        d.nr = i;
        d.onclick = function() { funktion(JSON.wert[this.nr].id) } ;
        document.getElementById('ausgabe').appendChild(d);

      
      > Das ist jetzt ungetestet.  
        
      Funktioniert aber prächtig. Danke.  
        
      Das einzige Problem ist, das dieses Script über ein AjaxRequest alle x Ms aufgerufen wird. Normalerweise sollten die div's dann überschrieben werden, hier werden alle hinten dran gehängt. Gibt es eine Möglichkeit alle vorher geschriebenen <div>s zu löschen und durch deine Methode dann neu zu zeichnen?  
        
      Danke im Vorraus,  
        
      Skiddo
      
      1. Das einzige Problem ist, das dieses Script über ein AjaxRequest alle x Ms aufgerufen wird. Normalerweise sollten die div's dann überschrieben werden, hier werden alle hinten dran gehängt. Gibt es eine Möglichkeit alle vorher geschriebenen <div>s zu löschen und durch deine Methode dann neu zu zeichnen?

        Habe es schon gelöst.
        Ein
        document.getElementById("ausgabe") = "";
        am Anfang der Schleife löst das Problem.

        Gruß und Kuss,
        Skiddo

        1. Hallo Skiddo,

          document.getElementById("ausgabe") = "";
          am Anfang der Schleife löst das Problem.

          da bleibt aber ein leeres div zurück. Schau die mal <http://de.selfhtml.org/javascript/objekte/node.htm@title=removeChild oder replaceChild> an.

          Gruß, Jürgen

        2. Hi,

          Habe es schon gelöst.
          Ein
          document.getElementById("ausgabe") = "";
          am Anfang der Schleife löst das Problem.

          Nein, das dürfte nur zu einem Fehler führen.

          MfG ChrisB

          --
          Light travels faster than sound - that's why most people appear bright until you hear them speak.