molily: Globale Vars / Vars übergeben

Beitrag lesen

Hallo,

var slider = new Array();

var entrys = new Array('RW','RD','RH');
var values    = new Array();
   values['RW'] = new Array(450,50,800);
   values['RD'] = new Array(450,50,800);
   values['RH'] = new Array(350,50,600);

  
Pfui! So macht man das nicht. Das macht man semantisch mit Objects (du benutzt ein Mischmasch, weil du Arrays und »assoziative Arrays« kennst, aber in JavaScript läuft der Hase etwas anders):  
  
~~~javascript
var sliders = {  
   RW : {  
     initial : 450,  
     start : 50,  
     end : 800  
   },  
   usw.  
};

Das durchläufst du dann mit einer for-in-Schleife und auf die Werte greifst du als Unterobjekte zu;

for (var name in sliders) {  
   var currentSlider = sliders[name];  
   alert(name + "\n"+ currentSlider.initial + "\n" + currentSlider.start + usw.);  
}

Das nur zum Stil.

for (var i=0;i<entrys.length;i++){

var dID = entrys[i];
  slider[i] = new Slider($(dID+'bar'), $(dID+'but'), {
   start: values[dID][1],
   end: values[dID][2],
   onChange: function(step,dID){
    $(dID+'val').setHTML(step);
   }
  }).setMin(values[dID][0]);

}
});

  
Der onChange-Handler wird im Kontext des Slider-Objektes ausgeführt, also speichern wir die ID doch einfach dort, damit wir im Handler darauf Zugriff haben.  
  
~~~javascript
var changefunc = function (step) {  
 alert(this.id + "\n" + step);  
 // Hier geht dann:  
 $(this.id + "val").setHTML(step);  
};  
  
var newSlider = new Slider(  
 $(dID + 'bar'),  
 $(dID + 'but'),  
 {  
  start : values[dID][1],  
  end: values[dID][2],  
  onChange: changefunc  
 }  
);  
newSlider.set(values[dID][0]);  
newSlider.id = dID;  
slider[i] = newSlider;

Das Slider-Objekt hat übrigens noch weitere interessante öffentliche Eigenschaften, darunter element und knob, Referenzen auf die beiden Elementobjekte. Darüber hätte man im Notfall auf die ID rauskriegen können.

P.S. Laut mootools-Doku nimmt der Slider-Konstruktor keine options namens start und end an und es gibt eine set-, aber keine setMin-Methode. Aber vielleicht benutzt du irgendeine Beta- oder angepasste Version...

Mathias