有关问题在人,非计算机

问题在人,非计算机

    前两天在考试系统中遇到一个有意思的问题,跟大家分享一下,问题是在判分功能上出现的,先来解释一下判分:操作人比对正确答案和学生答案,在得分框中输入得分,文本框失去焦点后判断所给分值是否合理,合理则写入数据库,否则给出提示。

界面有关问题在人,非计算机

代码

    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
  • 会不会是计算机的问题
   有可能吗?有,但是对比开发者犯错的概率而言,极低;且一旦有这些意识,即会影响自己的行为,当寻求别人帮助时,说:这个if和else同时执行了。影响其他人的思路,延误问题解决。

    问题出现,多半在人。

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
问题在人,说的很真切!