不要用"length"或一些可能的dom内部属性给页面元素命名!

 



从昨天晚上8:30开始就为xx的一个财税分析页面调试bug.直到现在才解决了问题.

环境是这样的:
页面(IE)使用buffalo调用后台函数.很简单的一个通讯过程。
代码上似乎没有什么可疑之处——直接copy以前的成功代码。页面form里有input,button,select,checkbox四种类型几十个元素。使用Buffalo.Form.formToBean()将form序列化成map传递到后台。

按钮一点击,bug就出现了!后台抛出异常,显示map是空的。

我开始对这bug进行分析,希望找出问题所在。

1,首先确认bug,执行一遍,问题依旧。通过eclipse debug,确认了后台的map确实为空,所以bug在页面上。
2,分析页面代码,代码实在太简单,怎么看也不会有问题。通过几次修改测试后确认问题不在页面代码里。
3,这样bug只可能在buffalo里面了。于是打开buffalo.js开始查看formToBean函数。
可怜的javascript,只能通过alert来一步步确认bug的位置,于是我写了个div来接收调试信息,而每次还要用CTRL+F5强制刷新页面 (老是担心没有刷新),通过十几分钟的测试,终于把问题锁定到form.elements数组的循环上了,alert显示 form.elements.length是一个【Object】,而按理是int。这个时候已经过去1个小时,收拾收拾准备回家了。但回家之前我在我的 电脑用firefox测试了一遍,发现bug诡异消失,提交正常!肯定是firefox与ie实现上的差异!曙光就在眼前了。
4,第二天上班,9:27开始重新考虑昨天的问题。
先用firefox分析,查看了dom树结构,看起来一切正常。然后回到IE,回想昨天调试的难度,看来应该找个插件来调试。——google到了http://www.ieinspector.com/ ,安装,可惜不能像firefox查看dom的方式那样显示元素。不过还是很强!我尝试着执行了这样一段javascript: document.forms.form.elements.length
立刻真相大白!

 


不要用"length"或一些可能的dom内部属性给页面元素命名!_第1张图片

 

【2007-8 bbs】

你可能感兴趣的:(JavaScript,eclipse,IE,Google,firefox)