wmode transparent: @-Bug
Der altbekannte Bug, kein @-Zeichen eingeben zu können, wenn der wmode auf transparent steht, sollte in Flash-Player 10.1 behoben sein. Ist er nicht. Zumindest nicht in Chrome. Man nutze diesen Workaround:
Wenn wir auf Windows sind (denn nur hier tritt der Bug auf), erlaube das @-Zeichen nicht als regulären Input. Denn in einigen Browsern tritt der Bug nicht auf, und in diesen Browsern wollen wir keine doppelten @-Zeichen
Außerdem verbieten wir q und Q, denn leider leider kann man auf dem KeyboardEvent kein preventDefault() aufrufen. Wir hätten dann “@q”, bzw “@Q”, statt nur “@”.
if( Capabilities.os.toLowerCase().indexOf(‘windows’) != -1 )
{
_tf.restrict = “^[@qQ]“;
_tf.addEventListener( KeyboardEvent.KEY_DOWN, _onWindowsKeyDown );
}
Stattdessen prüfen wir jedes eingegebene Zeichen mit dem folgenden Listener auf @/q/Q (KeyCode 81 – unter OS X ist der Code ein anderer). Hier ist zu beachten, dass der Cursor nicht am Ende des Textes stehen muss! Und nicht nur das: Es kann auch Text markiert sein, wenn man das @-Zeichen eingibt. Deshalb die etwas aufwendige Bestimmung des Bereiches, der durch @ ersetzt werden muss. Zum Schluss setzten wir den Cursor hinter das frisch eingegebene Zeichen.
private function _onWindowsKeyDown( event:KeyboardEvent ):void
{
if( event.keyCode == 81 )
{
var caret1 : int = _tf.selectionBeginIndex;
var caret2:int = _tf.selectionEndIndex;
var text1 : String = _tf.text.substring( 0, Math.min(caret1, caret2) );
var text2 : String = _tf.text.substring( Math.max(caret1, caret2), _tf.text.length );_tf.text = text1;
if( event.altKey )
{
_tf.text += ‘@’;
}
else if( event.shiftKey )
{
_tf.text += ‘Q’;
}
else
{
_tf.text += ‘q’;
}_tf.text += text2;
_tf.setSelection( text1.length+1, text1.length+1 );
}
}
Was mich jetzt noch interessieren würde: In dem Ticket ist die Rede von “ALTGR+2″ statt “ALTGR+q”; der Autor des Tickets ist Norweger. Damit wird der obige Code nicht funktionieren, denn KeyCode 81 ist das “q”
Alternativ habe ich die Prüfung
if( String.fromCharCode(event.charCode)==’@’ )
probiert. Das liefert mir auf OS X das erwünschte Ergebnis (“@”), aber auf Windows ist ALTGR+q das “q” und nicht “@”, ich gehe deshalb davon aus, dass ALTGR+2 die “2″ ist
Gibt es keine international gültige Version, nur mittels KeyboardEvent auf die Eingabe von Sonderzeichen zu prüfen??
0 Comments