bleicher_: JS inFunktion scope

Hallo@all, lange ist es her, dass ich mich hier zeigte - aber ich will nun wieder zum Thema finden. Gleich für den Einstieg stecke ich ein wenig fest - ich versuche inputs "slider" an Objekte zu Knüpfen um damit etwas mehr machen zu können. Ich scheitere aber an der Sichtbarkeit der Methoden. Die Idee ist - ich habe mehrere Objekte "slider" die unter anderem das DOM-Objekt input/slider haben. Uns seine Ereignisse soll das Objekt verarbeiten. So funktioniert es erstmal nicht:

function slider(id){
	this.currentValue;
	this.lastValue;
	this.slider=document.createElement("input");
	this.slider.type="range";
	this.slider.id=id;
	this.slider.addEventListener("input", *hier brauche ich die Übergabe an eine Methode von slider* ,false);
}

ich hoffe, es ist überhaupt sauber machbar, LG bleicher

  1. Hallo bleicher_,

    lange ist es her, dass ich mich hier zeigte

    Dein alter Account existiert noch. Passwort vergessen?

    Bis demnächst
    Matthias

    --
    Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
    1. Hallo, jepp - PW vergessen - die eMailadressen zur Wiederherstellung schluckt er nicht - habe halbes Dutzend durchprobiert ;/

      Thema übrigens gelöst - habe mich doch an _this=this erinnert ;) ich glaube da kommt was langsam ins Gedächtnis wieder.

      Hallo bleicher_,

      lange ist es her, dass ich mich hier zeigte

      Dein alter Account existiert noch. Passwort vergessen?

      Bis demnächst
      Matthias

      Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.

      1. Hallo bleicher_,

        jepp - PW vergessen - die eMailadressen zur Wiederherstellung schluckt er nicht

        Schreib mir ne Mail, ich kann deine Mailadresse ändern.

        Bis demnächst
        Matthias

        --
        Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
      2. Der Stand ist der - Objekte werden zwar erzeugt, aber die scheinen sich alle doch immer auf das letzte erzeugte zu verknüpfen - bewege ich was am ersten slider, spricht es den letzten erzeugten an: (frame ist einfach nur ein DIV)

        var s1=new slideRelastic("slideU");
        		document.getElementbyID("frame").appendChild(s1.getUI());
        		var s2=new slideRelastic("slideV");
        		document.getElementbyID("frame").appendChild(s2.getUI());
        		var s3=new slideRsolid("slideDN");
        		document.getElementbyID("frame").appendChild(s3.getUI());
        

        wo habe ich den Denkfehler?

        function slideR(id){
        	this.currentValue;
        	this.lastValue;
        	this.minValue;
        	this.maxValue;
        	this.slider=document.createElement("input");
        	this.slider.type="range";
        	this.ID=id;
        	this.slider.id=id;
        	this.indicator;
        }
        
        slideR.prototype.setValue=function(value){
        	this.lastValue=this.currentValue;
        	this.currentValue=value;
        	this.slider.value=value;
        };
        
        slideR.prototype.setIndicator=function(o){
        	this.indicator=o;
        }
        
        slideR.prototype.getUI=function(sClass){
        	this.slider.className=sClass || "slider";
        	return this.slider;
        }
        
        
        //Springt zurück auf 0, skaliert zwischen -100 und 100
        function slideRelastic(id){
        	slideR.call(this, id);
        	_this=this;
        	this.slider.min=-100;
        	this.slider.max=100;
        	this.slider.addEventListener("change", 	function(e){
        												_this.finalInput(e.target);
        											});
        	this.slider.addEventListener("input",	function(e){ 
        												_this.liveInput(e.target);
        											},false);
        }
        slideRelastic.prototype =Object.create(slideR.prototype);
        
        slideRelastic.prototype.finalInput=function(o){
        	this.setValue(o.value);
        	o.value=0;
        	console.log("e#"+this.currentValue);
        }
        
        slideRelastic.prototype.liveInput=function(o){
        	
        }
        
        //behält den wert, min-max variabel
        function slideRsolid(id, min, max){
        	slideR.call(this, id);
        	_this=this;
        	this.slider.min=min;
        	this.slider.max=max;
        	this.slider.addEventListener("change", 	function(e){
        												_this.finalInput(e.target);
        											});
        	this.slider.addEventListener("input",	function(e){ 
        												_this.liveInput(e.target);
        											},false);
        }
        slideRsolid.prototype=Object.create(slideR.prototype);
        
        slideRsolid.prototype.finalInput=function(o){
        	this.setValue(o.value);
        	console.log("s#"+this.currentValue);
        }
        
        slideRsolid.prototype.liveInput=function(o){
        	
        }
        
        1. Hallo bleicher,

          Verdammtes Nachtquiz, ich habe jetzt 10x draufgeguckt und nichts gesehen. Dann wollte ich schreiben, was Du alles richtig gemacht hast, um dich zu trösten, und da fiel es mir wie Haare von der Glatze: Dir fehlt ein 'var' vor _this=this. Ohne var ist es global und darum überschreibt es sich. Du brauchst es aber lokal.

          Nebenbei bemerkt:

          Funktionen, die du für new nutzt, solltest Du groß schreiben. Dass Du slideR klein schreibst, ist dagegen gut - den mit new aufzurufen macht keinen Sinn. Eventuell solltest du slideR gar nicht als Funktion erzeugen, sondern als Objektliteral und den Inhalt der slideR() Funktion in eine 'initialize' Methode verschieben. Dieses Objekt weist Du jeweils der prototype-Eigenschaft deiner spezifischen Sliderkonstruktoren zu und sie können dann alle davon erben.

          Mit deinem Object.create(slideR.prototype) erzeugst Du keinen Fehler, aber du legst eine unnötige Zwischenschicht an. Von dem her, was Du hier zeigst, könntest Du direkt slideR.prototype an die Prototyp-Eigenschaften der speziellen Slider zuweisen.

          Rolf