MooTools More 1.2.4 Keyboard Class probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • unglaublich
  • Registratie: Augustus 2008
  • Laatst online: 30-03 21:26
Hallo,

Ik heb een applicatie geschreven die waarin ik bepaalde functies heb toegekend aan knoppen op het toetsenbord door middel van de MooTools More 1.2.4 Keyboard class. Nu wil ik deze functie uitschakelen als er een inputfield gefocust is en weer ingeschakeld hebben als er geblurt wordt. Nu kan ik hier mKBE.activate() en mKBE.inactivate() voor gebruiken, als ik dit echter in de focus en onblur event attributes van het input element stop krijg ik de melding dat mKBE (het object waar het om draait) undefined is. Als ik mKBE.activate en inactive gebruik ergens in het script werkt het echter wél. Als ik de mootools addEvent functie gebruik voor 'focus' en 'onblur' werkt het helemaal niet (ook geen test alert o.i.d.).

Weet iemand hoe ik de keyboard shortcuts kan deactiveren als ik een input field focus?

script.js
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
window.addEvent('domready', function() {

var mKBE = new Keyboard({
    eventType: 'keyup', 
    events: { 
        'a' : function(){ 
        ... // De functie die ik wil uitvoeren
        }
    }
}).activate();

// Verder hieronder zit de MooTools More Keyboard Class

});


index.php
code:
1
2
3
4
5
6
7
8
9
// In het eigenlijke document is de DTD netjes gedefinieerd

<script src="http://www.google.com/jsapi" language="javascript" type="text/javascript"></script>
<script>
    google.load('mootools', '1.2.4');
</script>
<script src="/js/script.js" language="javascript" type="text/javascript"></script>

<label>Volledige Naam <input type="text" id="introfullname" onFocus="mKBE.inactivate();" onBlur="mKBE.activate();"/></label>


Bij het focussen van introfullname krijg ik in FireFox de fout:

mKBE is undefined


Even voor de duidelijkheid, als ik mKBE.activate o.i.d. in het script plaats werkt het wél. Het werkt alleen niet als ik hem in de event attributes van het input field zet!

Groeten,

Tom

[ Voor 38% gewijzigd door unglaublich op 10-01-2010 21:08 ]


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 12-06 21:15

MueR

Admin Tweakers Discord

is niet lief

Heb je een voorbeeld? Zonder relevante code is het natuurlijk enkel gokwerk.

Oh ja, lees deze even: Het algemeen beleid #groeten

[ Voor 34% gewijzigd door MueR op 10-01-2010 20:47 ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • unglaublich
  • Registratie: Augustus 2008
  • Laatst online: 30-03 21:26
Geen probleem, Zie originele post:)

[ Voor 135% gewijzigd door unglaublich op 10-01-2010 21:09 . Reden: Aanvulling ]


Acties:
  • 0 Henk 'm!

  • tonyisgaaf
  • Registratie: November 2000
  • Niet online
De variabele zit niet in de globale scope, maar in de lokale scope van de anonieme functie die je aan de onload toekent. Je moet de variabele dus eerst globaal definiëren en vervolgens er in je onload het keyboard aan toekennen.

NL Weerradar widget Euro Stocks widget Brandstofprijzen widget voor 's Dashboard


Acties:
  • 0 Henk 'm!

  • unglaublich
  • Registratie: Augustus 2008
  • Laatst online: 30-03 21:26
ik heb

var mKBE;

gedefinieerd in een script tag op de index en daarna in een window.addEvent functie de keyboard functie aan mKBE toegevoegd. Ik krijg echter nog steeds de foutmelding

Fout: mKBE is undefined
Bronbestand: http://-----------.nl/index.php
Regel: 1

Als ik de functie aanroep in de onblur en onfocus events van het input field.

Definieer ik de functie niet goed?

Acties:
  • 0 Henk 'm!

  • tonyisgaaf
  • Registratie: November 2000
  • Niet online
tomlankhorst schreef op maandag 11 januari 2010 @ 09:24:
ik heb

var mKBE;

gedefinieerd in een script tag op de index en daarna in een window.addEvent functie de keyboard functie aan mKBE toegevoegd. Ik krijg echter nog steeds de foutmelding
[...]
Dan moet je vervolgens in je onload niet meer "var mKBE = ..." gebruiken, maar eenvoudigweg "mKBE".

Gebruik trouwens alsjeblieft de [code=language] syntax, dan krijg je mooie code higlighting.

Wat je overigens ook kan doen is gebruikmaken van closures. Dat wil in dit geval zeggen dat je in de anonymous functie die je nu aan de onload toekent, ook de events aan de input attached. In dat geval houden de functies, die zijn toegekend aan onfocus/onblur een referentie naar de lokale variabele, omdat ze in dezelfde scope worden gedeclareerd.

Het is sowieso in dit geval "netter" om in je onload ook de functies aan onfocus en onblur te attachen, omdat "mKBE" als "Keyboard" helemaal niet bestaat tot de "onload".

BTW, ik zie het nu pas, returned "activate()" wel een referentie naar het "Keyboard"? Want je doet nu:
JavaScript:
1
var mKBE = new Keyboard().activate();
, het resultaat daarvan kan net zo goed een boolean of integer zijn.

[ Voor 9% gewijzigd door tonyisgaaf op 11-01-2010 14:48 ]

NL Weerradar widget Euro Stocks widget Brandstofprijzen widget voor 's Dashboard


Acties:
  • 0 Henk 'm!

  • unglaublich
  • Registratie: Augustus 2008
  • Laatst online: 30-03 21:26
Ja hoor het werkt nu ik 'var' uit de onload heb gehaald! Dom dom dom, maar ontzettend bedankt, ook voor de overige tips!
Pagina: 1