한글 입력 글자 제한 이슈 0
사실 가장 큰 이슈인 폰트 가독성에 관한 얘기를 할까도 했지만, 저작권이나 여러가지 얽혀있는 문제가 많아서 그건 다음 기회에 하기로 하고요...
이 이슈는 크게 두가지 입니다.
1. 글자수 바이트 제한
한글이 2Byte 이기에 발생하는 문제죠...
이건 머 별 어려움이 없습니다.
charCodeAt 만 잘 이용해 한글인지 영문인지만 판단하면 되니, 몇줄 안되는 코드로 해결하는건 일도 아니고요...
2. 제한 글자수 이상 입력시 화면에 표시되는 문제
이런겁니다
txt.maxChars = 3;
이렇게 세글자로 제한하면 영문은 딱 세글자만 잘 써지는데, 한글은 그 다음의 글자가 써지는 것은 아니지만 조합중의 글자가 보입니다. 결국 유저가 보기에는 써지는 것이죠...
자, 이걸 어떻게든 해결해달라고 한다면 해결해야겠지만 이게 좀 어렵다면 어렵습니다.
이게 스케일폼의 버그 아닌 버그이기 때문입니다.
플래시 또한 마찬가지이고 그러한 스펙이라고 봐야하거든요...
플래시의 스펙을 그대로 따라간 것이죠...
자, 입력을 제한해야 한다는 것... 이게 어렵습니다. 언어적인 것이라기 보다 vm 의 시스템에서 알아서 처리하는 부분이 있기 때문이죠...
3. preventDefault
os를 고려하지 않고 생각해보면 글자입력이란건 이렇습니다.
키보드 타이핑 > vm 에서 입력 받음 > 들어온 값을 텍스트 필드에 디스플레이...
그런데 우리는,
stage.addEventListener(KeyboardEvent.Key_DOWN, f);
function f(e:KeyboardEvent):void{
TextField.text = 입력값
}
이런 식으로 코드를 짠 적이 없습니다. 결국 vm에서 알아서 처리해버린다는 의미죠...
이걸 막아야 하겠죠...
그럼 이걸 막을 수 있느냐... 하는 문제가 생깁니다.
사람들이 잘 안쓰는 메소드지만 이걸 막을 수 있는 방법이 있습니다. 제목에 언급했듯이 preventDefault 메소드를 사용하는 방법입니다.
뭐 이런식입니다.
txt.addEventListener(TextEvent.INPUT, f);
function f(e: TextEvent ):void{
e.preventDefault();
}
이러면 텍스트 필드에 텍스트 입력이 안됩니다.
자, 해결했습니다~~~ 끝!!!
하면 좋겠지만... 이 또한 영문에서만 가능하고 한글은 여전히 조합글자가 화면에 표시됩니다.
우리에게 남은 방법은 없는걸까요??
다음 포스팅으로 넘어갑니다.