Markus Speicherl: Globale Vars / Vars übergeben

Beitrag lesen

Guten Abend

Vielen Dnak erstmal euch beiden. Das war schonmal sehr aufschlussreich.

Vorweg kann ich schonmal auflösen: Ich benutze eine modifizierte slider.js von einem dritten weil ich einen mootool-slider erstellen wollte der einen fixen startwert hat den man nicht unterschreiten soll und die slider.js von mootools dies von haus aus nicht mitliefert.

Doch zum Problem:
(Nebenbei: Ich fand das mit dem Hinweis auf den Stil sehr interessantm danke)

Ich habe jetzt meinen Code nochmal mit deinem Ansatz umgestrickt und er sieht nun so aus:

  
var sliders = {  
 RW : {  
  initial : 450,  
  start : 50,  
  end : 800  
 },  
 RD : {  
  initial : 450,  
  start : 50,  
  end : 800  
 },  
 RH : {  
  initial : 450,  
  start : 50,  
  end : 800  
 }  
};  
  
var slider = new Array();  
  
  
  
for (var name in sliders) {  
  var dID = sliders[name];  
  //alert(name + "\n"+ dID.initial + "\n" + dID.start + "\n" + dID.end);  
  
 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 : dID.start,  
  end: dID.end,  
  onChange: changefunc  
  }  
 );  
  
        //Dieser Wert muss setMin heissen, da die Modifizierte  
        //Slider.js keine einfaches .set unterstüzt  
 newSlider.setMin(dID.initial);  
  
 newSlider.id = dID;  
 slider[dID] = newSlider;  
  
}  
  

Allerdings kam ich damit jetzt ins schlingern und er sagt kien fehler mehr, aber die Slider arbeiten auch nicht.

Ich habe sie deswegen nochmal kompeltt umgestrickt damit sie dem originalen Mootools-Code am ähnlichsten sieht und deinen Rat beherzigt...

  
var sliders = {  
 RW : {  
  initial : 450,  
  start : 50,  
  end : 800  
 },  
 RD : {  
  initial : 450,  
  start : 50,  
  end : 800  
 },  
 RH : {  
  initial : 350,  
  start : 100,  
  end : 1000  
 }  
};  
  
var slider = new Array();  
  
for (var name in sliders) {  
  var dID = sliders[name];  
  var dNA = name;  
  //alert(dNA + "\n"+ dID.initial + "\n" + dID.start + "\n" + dID.end);  
  
  
 var changefn = function (step) {  
  //alert(dNA + "\n" + step);  
  $(this.id + "val").setHTML(step);  
 };  
  
 var newSlider = new Slider($(dNA+'bar'), $(dNA+'but'), {  
  start: dID.start,  
  end: dID.end,  
  onChange: changefn  
 });  
  
 newSlider.setMin(dID.initial);  
 newSlider.id = dNA;  
 slider[dNA] = newSlider;  
  
}  
  

Allerdings geht auch das nicht.
Ich nahm dann mal das this.id aus changefn raus und ersetze es mit dNA

  
  
 var changefn = function (step) {  
  //alert(dNA + "\n" + step);  
  $(dNA + "val").setHTML(step);  
 };  

Siehe da, alle Slider werden korrekt voreingestellt und lassen sich ziehen. Leider leider wird leider nur immer der Wert RH geändert um die neue Position anzuzeigen. Dies lässt nur einen schluss zu: RH ist das letzte Glied in der Kette und bleibt beim steten überschreiben wohl immer als letztes übrig weswegen alle änderungs-übergaben immer an RH gehen.
Doch wie mache ich das nun? Denn this.id scheint ja nicht zu gehen. Oder liegt der Fehler doch noch im Detail?

Grüsse