有关问题在人,非计算机
问题在人,非计算机
界面
前两天在考试系统中遇到一个有意思的问题,跟大家分享一下,问题是在判分功能上出现的,先来解释一下判分:操作人比对正确答案和学生答案,在得分框中输入得分,文本框失去焦点后判断所给分值是否合理,合理则写入数据库,否则给出提示。
界面![有关问题在人,非计算机 有关问题在人,非计算机](/default/index/img?u=aHR0cDovL3d3dy5teWV4Y2VwdGlvbnMubmV0L2ltZy8yMDE0LzA0LzAxLzEwMjQ1OTUwMi5qcGc=)
代码
HTML:
<td align="left"> <input type="text" name="score" class="number" value="${item.score}" onblur="judgeScore(this,'${item.studentId}');" /> </td>
JS:
<script type="text/javascript" > function judgeScore(thisSelf, studentId) { //获取判分需要的值 var judge_combox_exam = document.getElementById("examId").value; var judge_combox_course = document.getElementById("courseId").value; var judge_combox_type = document.getElementById("typeId").value; var questionId = document.getElementById("questionId").value; var userId = document.getElementById("userId").value; //获取所判分值 var score = 0; score = thisSelf.value; //获取该题满分 var fullScore = 0; fullScore = document.getElementById("fullScore").innerHTML; //判断给的分值是否大于满分,不大于则提交action,否则给出提示 if (score > fullScore) { //所给分值大于满分,字体颜色变红,给出提示 thisSelf.style.color = 'red'; thisSelf.style.backgroundColor="#EBD6B9"; thisSelf.focus(); thiSelf.value=0.0; alert('操作失败!原因:您给的分值大于该题满分,请重新输入!'); } else { //拼接action var getUrl = ""; getUrl = "${contextPath }/judge/JudgeScoreAction.action?judge_combox_course=" + judge_combox_course + "&judge_combox_type=" + judge_combox_type + "&judge_combox_exam=" + judge_combox_exam + "&questionId=" + questionId + "&studentId=" + studentId + "&score=" + score + "&userId=" + userId; //使用ajax提交 var xmlHttp = null; //表示当前浏览器不是ie,如ns,firefox if (window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); } else if (window.ActiveXObject) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } //设置请求方式为GET,设置请求的URL,设置为异步提交 xmlHttp.open("GET", getUrl, true); xmlHttp.onreadystatechange = function() { //Ajax引擎状态为成功 if (xmlHttp.readyState == 4) { //HTTP协议状态为成功 if (xmlHttp.status != 200) { alert("操作失败!原因:错误码=" + xmlHttp.status); } else { //提交成功,则修改字体颜色为绿色 thisSelf.style.color="green"; thisSelf.style.backgroundColor="#CCE8CF"; alert("判分成功!"); } } } //将设置信息发送到Ajax引擎 xmlHttp.send(null); } } </script>
问题
使用这些代码,你就能看到一个很有趣的问题,当你输入大于10的分值时,先提示判分失败,再提示判分成功,也就是if和else都执行了,这……
分析
仔细看代码分析逻辑,会发现,当分值大于10时,进入if,字体变红,这个正确;接着赋值为0.0,同时再次得到焦点,然后alert,点击确定失去焦点,再次触发onblur事件,也就是说此时触发的onblur事件,带过去的分值是0.0,进入else代码段。表面的现象是:既执行了if,也执行了else,其实函数是被调用了两次。
总结
在开发中,偶尔会遇到一些看似匪夷所思、光怪陆离的问题,并且花费较多的时间仍未解决;以这次开发为例,我注意到有些人,再碰到这样的问题,解决1-2小时解决仍无果时,下意识的会认为:
- 会不会是开发环境问题
- 会不会是使用的框架问题
- 会不会是语言的bug
- 会不会是计算机的问题
问题出现,多半在人。
- 16楼tang_huan_119小时前
- 机器不会欺骗人,问题出在人身上
- 15楼zs1593261645310小时前
- 技术能赚钱,思维能赚大钱!
- 14楼zc474235918昨天 23:58
- 师哥的传承。
- 13楼liutengteng130昨天 23:55
- 问题出现,多半在人。是不是提示了之后没有跳出循环啊?
- 12楼kanglix1an昨天 23:44
- 出现问题,主要在人
- 11楼XUJIAOlf昨天 23:24
- 问题出现,多半在人。
- 10楼gelupu昨天 23:11
- 问题出现,多半在人。
- 9楼hxj135812昨天 22:02
- 达哥,加油!
- 8楼caozhangyingfei0109昨天 21:57
- 问题出现,多半在人。那么该如何有效管理
- 7楼zhang_xinxiu昨天 21:19
- 问题在人,却是如此
- 6楼u010121883昨天 20:36
- 学习了
- 5楼akkzhjj昨天 20:18
- 学习了,问题在人,确实如此
- 4楼lishehe昨天 20:14
- 问题出现,多半在人
- 3楼wlccomeon昨天 19:45
- 很不错的发现思路,学习啦!
- 2楼zhangyingjie09昨天 19:24
- 是的多半在人。
- 1楼gwblue昨天 19:05
- 问题在人,说的很真切!