[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!)

Related Post:

Tagged on: , ,