Klassenmethode kennt Klassenvariable nicht

C3000

Mitglied
Guten morgen

Ich hab mal wieder ein Problem und denke das ich einfach nur ein Brett vorm Kopf hab, aber...

Ich habe eine Klasse Tab, in der gibt es die Variablen this.nr und this.mouseover.
Falls nun auf ein bestimmtes Element geklickt wird, erzeuge ich ein Eventhandler, der bei jedem klick prüft ob onmouseover false ist und wenn ja dann mein Element löscht. Das ganze sieht dann so aus:

Code:
function Tab(id, contentId, columns){
    this.nr = id;
    this.onmouseover = false;

    this.menuTab = function(){
    	document.body.appendChild(
				Builder.node("div", {id:"tabMenuFrame", onmouseover:"this.mouseover = true;", onmouseout:"this.mouseover = false;"});
    	}
        Event.observe(window, 'click', tabs[this.nr].closeMenu);
    }

    this.closeMenu = function(){
    	if(!this.mouseover){
    		document.getElementById('tabMenuFrame').parentNode.removeChild(document.getElementById('tabMenuFrame'));
    		Event.stopObserving(window, 'click', this.closeMenu);
    	}
    }
}
Das Problem ist das in der Methode closeMenu this.mouseover (undefined) nicht bekannt ist, wobei ich diese doch innerhalb der Klasse aufrufe und diese auch bekannt sein sollte.

tabs ist ein Array in dem meine tab- objekte gespeichert werden.

Danke schon mal im vorraus.

MfG
 
Zuletzt bearbeitet:
Mach mal zum registrieren:

Code:
var tab = tabs[ this.nr ];
this.func = function() { tabs.closeMenu.apply( tabs, [] ); };
Event.observe(window, 'click', this.func );

und

Code:
Event.stopObserving(window, 'click', this.func );
 
Morgen

Dankeschön für deine Antwort, sie hat mich schon ein ganzes Stück nach vorne gebracht.
Allerdings habe ich sie ein wenig verändern müssen.

Das ganze sieht nun so aus:

Code:
	var tab = tabs[ this.nr ];
	this.func = function() { tab.closeMenu.apply( tab, [this] ); };
	Event.observe(window, 'click', this.func );

und

Code:
this.closeMenu = function(){
    	if(!this.mouseover && this.momouseover != null){
    		document.getElementById('tabMenuFrame').parentNode.removeChild(document.getElementById('tabMenuFrame'));
    		Event.stopObserving(window, 'click', this.func );
    	}
    }

Es gibt allerdings noch ein Problem. this.mouseover wird durch ein onmouseover und onmouseout Event verändert, jedoch wird diese Veränderung in der Methode closeMenu also der unteren nicht beachtet. Diese übernimmt nur den Wert der übergeben wird. Kann ich da noch was ändern das die Methode noch die Veränderungen bemerkt?

MfG
 
Morgen

Dankeschön für deine Antwort, sie hat mich schon ein ganzes Stück nach vorne gebracht.
Allerdings habe ich sie ein wenig verändern müssen.

Das ganze sieht nun so aus:

Code:
	var tab = tabs[ this.nr ];
	this.func = function() { tab.closeMenu.apply( tab, [this] ); };
	Event.observe(window, 'click', this.func );

und

Code:
this.closeMenu = function(){
    	if(!this.mouseover && this.momouseover != null){
    		document.getElementById('tabMenuFrame').parentNode.removeChild(document.getElementById('tabMenuFrame'));
    		Event.stopObserving(window, 'click', this.func );
    	}
    }

Es gibt allerdings noch ein Problem. this.mouseover wird durch ein onmouseover und onmouseout Event verändert, jedoch wird diese Veränderung in der Methode closeMenu also der unteren nicht beachtet. Diese übernimmt nur den Wert der übergeben wird. Kann ich da noch was ändern das die Methode noch die Veränderungen bemerkt?

MfG

dann ruf die untere methode doch einfach auf, wenn die variable geändert wird? versteh nicht gnaz was du meinst.
 
Tut mir leid falls ich mich unverständlich ausgedrückt habe.

Die onmouseover Variable wird durch, wie der Name sagt, ein onmouseover und onmouseout event geändert. Nur bei einem click soll überprüft werden ob die Variable true oder false ist. Aus diesem Grund funktioniert dein Lösungsvorschlag nicht, bzw ich versteh nicht die Realisierung.

Ich hoffe das ist verständlicher.

MfG
 

Neue Beiträge

Zurück