2012年2月17日 星期五

限制某輸入欄位只能輸入數字(2)

這次是在EXT內實做這個功能的方式,
不過因為需求是相同的,
想想還是給個續篇的方式處理吧。

試了很多方法,目前有兩個方法可以進行作用,同樣都可以達到濾掉不合法字元的效果,
可惜他們都是EXT內建包好的東西,
因為對javascript本身不熟得關係所以不清楚其他語言能不能用>"<
大家就加減看吧。

以下說明這次解法:




方法1:
首先,在ext前端NumberField中加入中間那段code:

<ext:NumberField>
<Listeners>
<Invalid Handler="if(this.isValid()==false){ this.clearInvalid(); }" />
</Listeners>
</ext:NumberField>

這個作法在前台不管怎麼輸入他都不會有所動作,
只會照常出現不合法輸入時的紅色底線,
而在傳出資料要進入後台時,才會觸發事件。

利用內建的isValid()函式,判斷是否有不合法的輸入,
有的話就會把所有不合法的輸入從字串中清除!

而當輸入全部不合法時,則會傳最原始從資料庫撈出來的預設資料。

聽起來似乎不錯了。

方法2:

可是這種進入後台再檢查的作法儘管不會出現bug了,
但總是會覺得似乎哪邊怪怪的,
後來經過研究後改為使用onBlur的作法,
只要再使用者輸入之後立即進行檢查,
一旦發現有出現不合法的字元就立即重設:



<ext:NumberField>
<Listeners>
<Blur  Handler="if(this.isValid()==false){this.reset();}" />
</Listeners>
</ext:NumberField>



改為在前端進行輸入時就立即進行檢查,
讓使用者在第一時間就知道不能夠這樣玩,
也更加的直覺了!



沒有留言:

張貼留言