当前位置: 代码迷 >> Web前端 >> AS3文本输入框限制输入:12个字符或六个中文(中英文夹杂)
  详细解决方案

AS3文本输入框限制输入:12个字符或六个中文(中英文夹杂)

热度:473   发布时间:2012-08-24 10:00:21.0
AS3文本输入框限制输入:12个字符或6个中文(中英文夹杂)

  1. 这个功能在很多地方都需要用到,会令人头疼的地方就是中英文夹杂的时候无法处理,下面是我自己通过google查询和自己编写的结果:??
  2. ??
  3. 首先设置maxChars?这个属性,它控制文本框输入的字符长度,在as3中,一个中文和一个字母的长度都是1,但实际上一个中文是2个字节,1个英文是一个字节!??
  4. ??
  5. 设置restrict?=?"a-zA-Z\u4e00-\u9fa5",这样是代表只能够输入大小写的英文字母和中文??
  6. ??
  7. 以上设置可以保证文本的长度和合法性,但是无法达到?12个字符或6个中文(中英文夹杂)?的条件,所一下面我们再加上一步操作:??
  8. ??
  9. //获取字符串的字节数??
  10. ??
  11. private?function?getStringBytesLength(str:String,charSet:String):int??
  12. ???{??
  13. ?????
  14. ????var?bytes:ByteArray?=?new?ByteArray();??
  15. ?????
  16. ????bytes.writeMultiByte(str,?charSet);??
  17. ?????
  18. ????bytes.position?=?0;??
  19. ?????
  20. ????return?bytes.length;??
  21. ?????
  22. ???}??
  23. ??
  24. 给文本输入框加上一个事件:??
  25. ??
  26. inputTxt.addEventListener(TextEvent.TEXT_INPUT,?__nameInputEvent);??
  27. ??
  28. private?function?__nameInputEvent(e:TextEvent):void??
  29. ???{??
  30. ?????
  31. ??????if((getStringBytesLength(__nameInput.text,"gb2312")?+??
  32. ??
  33. ????????????getStringBytesLength????(e.text,'gb2312'))?>?__nameInput.maxChars)??
  34. ??????{??
  35. ?????????e.preventDefault();??
  36. ???????return;???
  37. ????}??
  38. ???}??
  39. ??
  40. 这样就完成了!上面是在flash?ide?下可以实现的,但是在flex中,TextEvent.TEXT_INPUT?这个事件是不管用的,无法e.preventDefault();所以我继续查资料,然后通过下面的方法,在flex中实现了这个功能:??
  41. ??
  42. //这是组件??
  43. ??
  44. <s:TextInput?x="100"?y="65"?id="txt_name"?width="105"?enabled="true"?changing="__nameChangingEvent(event)"/>??
  45. ??
  46. //这是需要设置的两个属性??
  47. ??
  48. txt_name.restrict?=?"a-zA-Z\u4e00-\u9fa5";??
  49. txt_name.maxChars?=?12;??
  50. ??
  51. //下面是用到的操作??
  52. ??
  53. /**?
  54. ????*?姓名输入事件?
  55. ????*??
  56. ????*/???
  57. ????protected?function?__nameChangingEvent(event:TextOperationEvent):void??
  58. ????{??
  59. ?????if((event.operation?as?InsertTextOperation)==null)??
  60. ?????{??
  61. ??????return;??
  62. ?????}??
  63. ??????
  64. ?????var?input:String=(event.operation?as?InsertTextOperation).text;??
  65. ??????
  66. ?????if((__getStringBytesLength(txt_name.text,"gb2312")?+?__getStringBytesLength(input,'gb2312'))?>?txt_name.maxChars)??
  67. ?????{??
  68. ??????event.preventDefault();??
  69. ?????}??
  70. ????}??
  71. ?????
  72. ?????
  73. ????/**?
  74. ????*?获取该字符串的字节数??
  75. ????*/???
  76. ????private?function?__getStringBytesLength(str:String,charSet:String):int??
  77. ????{??
  78. ?????var?bytes:ByteArray?=?new?ByteArray();??
  79. ??????
  80. ?????bytes.writeMultiByte(str,?charSet);??
  81. ??????
  82. ?????bytes.position?=?0;??
  83. ?????return?bytes.length;??
  84. ??????
  85. ????} ?

??转自http://cloud21.iteye.com/blog/745749


  相关解决方案