ich eine var nicht übergeben bekomme, bzw nicht es hinbekomme sie global zu setezn.
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]);
Im grunde dreht es sich nur um diesen Abshcnitt:
onChange: function(step,dID){
$(dID+'val').setHTML(step);
}Ich bekomme es nicht hin, dass in dieser Funktion dID übergeben bzw. ausgegeben wird. JS liefert mir jedesmal einen Fehler und sagt es wäre nicht defniert.
Die Anleitung zu dieser Eigenschaft ist in der Tat wenig hilfreich, wenn Du aber mal in den Slider-Quelltext schaust, wirst Du ganz am Ende folgendes finden:
checkStep: function(){
if (this.previousChange != this.step) {
this.previousChange = this.step;
this.fireEvent('onChange', this.step);
}
},
Das ist die Stelle, an der die Slider-Klasse via fireEvent() Deine onChange-Funktion aufruft, und wie Du siehst, mit nur einem Argument, nicht zweien.
Ich probierte auch schon aus, dass ich es nicht übergebe, da dID ja schon oben _ausserhalb_ der Funktion defniert wurde und somit eigentlich global für die Funktion sein müste.
Nein, die onChange-Funktion läuft in ihrem eigenen Kontext. In der Schleife definierst Du lediglich den Code der Funktion, ablaufen tut er erst später, unabhängig von der Schleife und damit ohne die Variablen, die in der Schleife existieren.
Ich habe auch schon folgendes Probiert:
onChange: function(step){
$(entrys[i]+'val').setHTML(step);
}
Gleiches Problem: Die Variable i existiert in der Schleife, aber nicht in der Funktion.
onChange: function(step,i){
$(entrys[i]+'val').setHTML(step);
}
Gleiches Problem wie eingangs: Die onChange-Funktion wird mit nur einem Argument übergeben.
Hat jemand eine Ahnung wie ich dieser Funktion mitteile wi es an den zu übergeben string kommt?
Die Variable this sollte in der onChange-Funktion auf das zugehörige Slider-Objekt zeigen. Du müsstest also auf this.element und this.knob (die beiden ersten Argumente bei new Slider()) zugreifen können:
slider[i] = new Slider($(dID+'bar'), $(dID+'but'), {
start: values[dID][1],
end: values[dID][2],
onChange: function(step){
$(irgendwie_die_ID_eines_Elements_holen_und_um_'bar'_kürzen(this.element)+'val').setHTML(step);
}
});
Womöglich kannst Du sogar eigene Optionen übergeben, die dann über this.options.bla ansprechbar sind, etwa so:
slider[i] = new Slider($(dID+'bar'), $(dID+'but'), {
start: values[dID][1],
end: values[dID][2],
bla: dID,
onChange: function(step){
$(this.options.bla+'val').setHTML(step);
}
});
Das ist aber nur eine Vermutung.
Gruß, Hannes.