有关问题在人,非计算机
问题在人,非计算机
界面
前两天在考试系统中遇到一个有意思的问题,跟大家分享一下,问题是在判分功能上出现的,先来解释一下判分:操作人比对正确答案和学生答案,在得分框中输入得分,文本框失去焦点后判断所给分值是否合理,合理则写入数据库,否则给出提示。
界面
代码
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
- 问题在人,说的很真切!