由今天的错误引发对编程的思考总结

来源:互联网 发布:希斯.莱杰 知乎 编辑:程序博客网 时间:2024/04/28 11:58

还是哪个OA项目,今天又发生一个问题,关于JS的。效果图如下:


这里的“禁用”是个超链接代码,当单击时会触发事件,弹出confirm对话框提示是否确认操作,代码为:

<a href="#" onclick="javascript:if(confirm('确定禁用吗?')){location.href='/JBA_OA/oauser/user_doDisableUser?item.userId=<s:property value="userId"/>';}">[禁用]</a>

可是离奇的错误发生了,同样的代码在另外一个角色管理的“禁用”下没有任何问题,简直beautiful极了

在这个页面偏偏不行,当即做了一下思考与操作:

1.是不是我的代码写错了一个字母,少了一个符号?   经过复制粘贴,多次操作,证明不是这方面问题;

2.是不是服务器缓存什么的没清掉?  经过重启服务器,重新运行,证明跟这个没关系;

3.是不是jsp页面本身bug,因为看到唯独此jsp页面报警高,提示jsp声明语句中的java.util.*中的类从未使用什么的?当即删除页面,把代码重新整了下,结果依然这样;

4.最不靠谱的想法蹦出来了,是不是我机子问题,操作系统问题?这个想法代价较大,一时没敢进行对系统重装操作,事实证明没这么做还是很明智的。


无奈之下,我请来了老师(真走运现在还有老师)

老师的找问题思路始终停留在我思考的第一步骤,也就是说根据他的经验判断,这个只能是js代码问题,于是经过重新写confirm,更改confirm的位置发现均不凑效,可能是用火狐不习惯,老师改成了IE,在IE中提示了一个脚本错误,具体是什么内容忘了,大概意思是什么变量定义在函数confirm之外了,归根结底就是一个confirm函数没起作用,为此还特地换成alert实验看是否是否所有js函数都不可用,实践证明仅此一个confirm函数,老师也差点没辙,百度“confirm在jsp中无效”,貌似无果。

不是敲错代码问题,老师考虑是否是我引用了别的js包,导致confirm函数不可用,还问我是否这么做了,我居然说没有。沿着这个思路,问题出现了。

原来 ,改JSP页面有一个分页功能,而分页功能中有更改每页显示条数的自定义函数,坑爹的我居然为这个函数命名起了confirm,一个字母都不差,这等于说把js内置的confirm重写了,因而只要哪个页面引用了(<@ include file="xxx">)这个分页页面,就会导致confirm函数不能正常使用。

function confirm(cp){
var tcount = document.pageForm.elements['pb.totalCount'].value;
if(cp>=1 && cp<=tcount){
document.pageForm.elements['pb.pageSize'].value=cp;
jump(1);
}
}

总结一下这个错误带来的启发:

写程序出现错误是很正常的,因为人的能力有限,但一定要细心,做到尽量减少那些低级错误,像这种使用了关键字、内置函数名、保留字的命名错误一定要杜绝;

考虑错误的问题要靠谱,事实证明,95%(夸张的估计下)的错误都是自己写代码不正确不规范造成的,很少有什么系统问题,服务器问题,关于这个问题,我要诅咒一下我大学的同学和老师,老师水,同学更水,自己弄不好的就甩一句“你机子问题,什么破电脑”,于是从那时起就潜意识的觉得自己的电脑是万中无一的那台有问题的电脑,用的系统也是万众无一的那个有问题的XP系统。所以今后写程序出错,第一个应该找自己的主管原因,而不是去猜测十分不靠谱的客观原因,哪些出错的代码,一定要斟酌所在的上下文环境,找出每一个与之发生联系的地方,特别是页面间的调用,由于不在一个页面,容易混淆,把变量名、方法名这些都保证没有错误。

原创粉丝点击