/ 闭门造轮子 / FF和Chrome等现代浏览器支持字符串变量的中括号取值计算

FF和Chrome等现代浏览器支持字符串变量的中括号取值计算

2012-09-19 posted in [问题即经验]

项目表单回填中遇到一个极其怪异的radio组根据数据回填问题,所有浏览器都回填错,但是FF/Chrome都可以至少选中第一项,但IE全都不选中。当时已经是上线最紧张的时候,上到一半仍发现有这种奇怪的问题没解决。在上线战斗小组吵闹且紧张的会议室里完全静不下心来追查问题,于是立马一个人搬到隔壁去排查。

安静的环境的确提高效率,跟着断点一轮就发现了问题的原因。在我扩展esui的AjaxForm组件中,有一个根据传入数据对所有表单中的项进行回填的方法,当数据项遇到单选/复选组时,会调用集合组件的selectByValues方法,但这里遗忘了按照借口传入数组类型,而是直接用单项的值进行回填。IE下就彻底悲剧了,但是FF和Chrome下居然都可以选中第一项,虽然不正确,但至少不会导致表单提交缺少值的错误。仔细看才发现传入的字符串变量在FF和Chrome下仍可以像数组一样被遍历,这正是新浏览器中实现的ECMA-262 5th的新规范。刚好case里这组值都是一位数字的字符串,所以正好都取到第一个字符就正常回填了!

解决方案自然是将所有集合选项的回填值处理成数组。不考虑特殊情况的话下面的一句话很实用:

value.toString().split(',')

-EOF-