window.removeEvent('keydown', this.keydownHandler);
This says remove this specific function if it is there. However you added
it like this -->
window.addEvent('keydown', this.keydownHandler.bindWithEvent(this));
Most of the methods that mootools adds to Function (
http://www.mootools.net/docs/Native/Function) return a different function
that does other things. It is pretty much returning a function that will
call your function. That being said the function you added and the one you
are trying to remove are not the same function.
Try modifing it to this.
this.keydownEvent = this.keydownHandler.bindWithEvent(this);
window.addEvent('keydown', this.keydownEvent);
....Later....
window.removeEvent('keydown', this.keydownEvent);
You might also want to take a look at
http://www.mootools.net/docs_rc1/more/Class/Class.Binds
--Perrin (CrypticSwarm)
On Wed, Mar 11, 2009 at 8:23 AM, marlun78 <[email protected]> wrote:
>
> Hey,
> Can anyone explain to me why this super simple script ain't working? I
> want to listen for key strokes until the user presses the Esc-button.
> What am I doing wrong?
>
> // Test Class
> var KeyboardListener = new Class({
> logging: true,
> initialize: function() {
> this.startListening();
> },
> log: function() {
> if (this.logging) {
> if (window['console']) {
> console.log($A(arguments).join('\n'));
> }
> else {
> alert($A(arguments).join('\n'));
> }
> }
> },
> startListening: function() {
> this.log('start listening ...');
> window.addEvent('keydown', this.keydownHandler.bindWithEvent
> (this));
> },
> keydownHandler: function(e) {
> if (e.key == 'esc') {
> this.log(e.key, 'stop listening ...');
> window.removeEvent('keydown', this.keydownHandler);
> }
> else {
> this.log(e.key);
> }
> }
> });
>
> // Implementation
> window.addEvent('domready', function() {
> new KeyboardListener();
> });
>
> Thanks!
> /Martin
>