그렇다.. 저번 보다 코드가 엄청 복잡해 졌다.
사실 말이야 바른 말이지,
뭔가를 제대로 하려면
코드는 대개 복잡해 지기 마련이다.
문제를 요약하면 이렇다.
사실, TextField의 keyDown 이벤트는
실제 보이는 한글 글자를 반영해 주지 못한다.
실제 보이는 한글 글자를 반영해 주는 건
keyUp 이벤트이다.
따라서, 만일 사용자가 희덕님의 지적대로
키보드를 꾹 누르고 안 떼면
keyUp 이벤트는 한 번도 발생하지 않고
이렇게 되면, 개발자는 정말 어둠속을 헤매야 한다.
실제 반영된 글자를 알 수 없는 상황에서 어둠속을 헤집고 다니듯이
글자를 처리해 줘야 하니까 말이다.
그래서 나는 이 문제를 도대체 어떻게 해결해야 할까 고민에 고민을 거듭했다.
그래서 내린 결론이
두 개의 플래그를 추가해서
하나는 keyDown 이벤트에 쓰고
다른 하나는 keyUp 이벤트에 쓰는 방식이다.
이렇게 하면 두 이벤트가 서로 충돌하지 않으면서
keyDown 이벤트는 keyDown 이벤트의 기능을 하게 되고
keyUp 이벤트는 keyUp 이벤트의 기능을 할 수 있게 된다.
keyUp 이벤트를 처리하는 upHandler는 사용자가 글자를 한 글자씩 백스페이스를 눌러서
제거할 때 사용된다.
반대로 keyDown 이벤트는 사용자가 백스페이스를 계속 누르고 있을 때 사용된다.
이 때 keyDown 이벤트에서는 단 한번만 selection을 우측으로 1 이동시킴으로써
글자를 지우기 시작한 지점 이후에 나오는 다른 글자들이
지워지지 않도록 했다.





