[AS3] 限制中英文字數
限制 TextField 輸入時的中英文字數。
假如我們要限定輸入文字的字元數時,可能有時候會需要將中英文一起考慮進去,一個中文字代表一個全型字,也就是兩個字元,這時候在Flash中設定TextField的最大字元數是沒有用的。假如我們設定最大字元數是10,這時候打中文或全型字還是一樣可以輸入十個字,這就不是我們想要的了~
這樣的功能可以透過監聽 TextEvent.INPUT 的事件搭配 ByteArray 來知道每次輸入後的字元數為多少,接著利用 preventDefault()將原本的 INPUT 事件取消(不是所有事件都有這個功能,您可以透過 cancelable 屬性得知某事件是否可以取消)。
import flash.events.TextEvent; var maxTextNum:uint = 10; myTxt.addEventListener(TextEvent.TEXT_INPUT, onTextInput); function onTextInput(e:TextEvent):void { trace(__getStringBytesLength(myTxt.text, "Big5")); if (__getStringBytesLength(myTxt.text, "Big5") > (maxTextNum - 1)) { e.preventDefault(); return; } } function __getStringBytesLength(str:String,charSet:String):int { var bytes:ByteArray = new ByteArray(); bytes.writeMultiByte(str, charSet); bytes.position = 0; return bytes.length; }
利用 ByteArray 的 writeMultiByte 可以指定輸入的字元集為何,因此長度的判斷就可以很精準了!不過因為 TextEvent.INPUT 事件是在輸入
文字後才觸發,因此就需要利用 e.preventDefault 來阻止原本的 INPUT事件囉~
歡迎您留言與分享!(Welcome for comments or sharing!)
- [FD] FlashDevelop初探
- [AS3] 動態複製顯示物件