Problem mit JS Variable in einer Schleife

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit JS Variable in einer Schleife

    Hallo zusammen,
    ich hab da mal ein kleines problem mit ner Variable in ner Schleife.
    Und zwar, wird in einer Funktion eine schleife durchlaufen. Hier wird bei jedem durchlauf die Variable path geändert und diese wird einem per JS generierten onclick ereignis in der folgenden Form hinzugefügt:

    Code:
    link.onclick = function() {alert(path);};
    Das problem was hier nun entsteht ist, dass bei jedem onclick aufruf der Wert des letzten Schleifendurchlaufs ausgegeben wird. Kennt jemand einen kleinen Tipp für mich wie man den jeweiligen Wert des jeweiligen Schleifendurchgangs in das onclick Ereignis bekommt?
    mfg
    Günni


    Praxis: Jeder kann´s, aber keiner weiß wie´s geht...
    Theorie: Jeder weiß wie´s geht, aber keiner kann´s ...
    Microsoft vereint Praxis und Theorie: Nix geht und keiner weiß warum
    City-Tiger - Online durch die Straßen tigern...

  • #2
    zeig doch mal die Schleife...
    "I don't want to belong to any club that would accept me as a member."

    Groucho Marx

    Kommentar


    • #3
      Code:
      for(var i = 0; i < dir_list.childNodes.length; i++) {
      					var item = dir_list.childNodes[i];
      					var display_name = par************MLNode(item, 'display_name', '');
      					var path = par************MLNode(item, 'path', '');
      					var li = document.createElement('li');
      					var link = document.createElement('a');
      
      					link.href = 'javascript:function doNothing() {return false;}';
      					link.onclick = function() {_loadPathList(path);};
      					link.appendChild(document.createTextNode(display_name));
      
      					// LI zusammenbauen
      					if(path.match(/^[a-zA-Z0-9_\-\/]*$/)) {
      						li.appendChild(_getToolbar(path));
      					} else {
      						li.appendChild(document.createTextNode('Text...'));
      					}
      					li.appendChild(link);
      					// LI Liste hinzufügen
      					_elements['list'].appendChild(li);
      				}
      mfg
      Günni


      Praxis: Jeder kann´s, aber keiner weiß wie´s geht...
      Theorie: Jeder weiß wie´s geht, aber keiner kann´s ...
      Microsoft vereint Praxis und Theorie: Nix geht und keiner weiß warum
      City-Tiger - Online durch die Straßen tigern...

      Kommentar


      • #4
        Hm,
        würde ja erstmal die deklaration der Variablen aus der Schleife rausnehmen
        zb.

        var item = null; //etc
        for(var i = 0; i < dir_list.childNodes.length; i++) {
        // Hier dann nur noch die zuweisungen
        item = dir_list.childNodes[i];
        display_name = par************MLNode(item, 'display_name', '');
        path = par************MLNode(item, 'path', '');
        li = document.createElement('li');
        link = document.createElement('a');

        // der Schleifen körper

        }

        oder ev. den Variablennamen noch den Zähler anhängen:

        var item+"_"+i = dir_list.childNodes[i];

        aber ist ins blaue getippt und nicht getestet...
        "I don't want to belong to any club that would accept me as a member."

        Groucho Marx

        Kommentar


        • #5
          Es geht bei der Sache nicht um die Variable item, sondern um den Link und die übergabe des Parameters path.
          Code:
          var link = document.createElement('a');
          
          link.href = 'java script:function doNothing() {return false;}';
          link.onclick = function() {_loadPathList(path);};
          link.appendChild(document.createTextNode(display_name));
          mfg
          Günni


          Praxis: Jeder kann´s, aber keiner weiß wie´s geht...
          Theorie: Jeder weiß wie´s geht, aber keiner kann´s ...
          Microsoft vereint Praxis und Theorie: Nix geht und keiner weiß warum
          City-Tiger - Online durch die Straßen tigern...

          Kommentar


          • #6
            ja, aber die hängen ja auch zusammen...

            var item+"_"+i

            ist natürlich unfug...

            mach doch mal

            var item = array()
            // für die anderen Werte das gleiche
            und dann in der Schleife:
            path[i] = par************MLNode(item[i], 'path', '');
            /// für die anderen Werte das gleiche....
            "I don't want to belong to any club that would accept me as a member."

            Groucho Marx

            Kommentar


            • #7
              tjaa..
              wieder mal ein tolles (oder auch schlechtes) feature von JavaScript:
              es ist egal *wo* man eine Variable in einem Block mit var deklariert, sie ist im gesamten Block sichtbar!
              Da die einzigen Blöcke in JS Funktionen sind.. heißt das folgendes:
              Code:
              function func(){
                  if (variable == undefined) alert(true);
                  /* ... */
                  if(somethingelse){
                      var variable = 4;
                  }
              }
              omg funktioniert???!!! obwohl somethingelse einen ReferenceError generiert und die Bedingung für den if-"Block" nie wahr ist

              Ein weiteres schmankerl von JS: Wenn man eine Variable noch ein mal mit var deklariert oder definiert, hat das *keinerlei* Auswirkungen.

              Jetzt zum Problem..
              So geht das:
              Code:
              for(var i=0;...){
                  /*...*/
                  el.onclick = (function(){
                      return function(e){
                          e=e||event; 
                          _doWhatever(path);
                      };
                  })();
                  /*...*/
              }
              [edit]
              Ich sehe grad, sooo elegant ist das auch nicht.
              Code:
              var theUltimateHandler =  function(e){
                      e=e||event; 
                      _doWhatever(this.path);
              };
              for(var i=0;...){
                  /*...*/
                  el.path = path;
                  el.onclick = theUltimateHandler;
                  /*...*/
              }
              Besser
              Zuletzt geändert von frodenius; 15.12.2008, 12:52.
              blllubb

              Kommentar


              • #8
                @frodenius
                Das war die Lösung, dank dir!!!
                Code:
                link.path = path;
                link.href = 'javascript:function doNothing() {return false;}';
                link.onclick = function(e) {
                    _loadPathList(this.path);
                }
                mfg
                Günni


                Praxis: Jeder kann´s, aber keiner weiß wie´s geht...
                Theorie: Jeder weiß wie´s geht, aber keiner kann´s ...
                Microsoft vereint Praxis und Theorie: Nix geht und keiner weiß warum
                City-Tiger - Online durch die Straßen tigern...

                Kommentar

                Lädt...
                X