2013-8-8:
1、银行归档系统中,有一个对日志信息状态修改的按钮问题 有三种状态0:未查看 1:正在处理 2:处理完毕(页面只显示0和1状态)
问题描述:点击每一页的除第一条信息外,但是第一条按钮的value会在后台处理反应的一段时间内变成“正在处理”,后台处理完毕后恢复正常,再连续点击其他状态为0的按钮(除第一个外,按钮也都能变为状态1(正在处理)。可是如果点击一下第一条后,再点击页面中其他状态为0的按钮,就会出现BUG(直接显示“您确定已经处理完了异常了吗?点击确定该条数据会从页面中删除”这句话
按钮处理对应的js:
function change(obj)
{
var pageNum = ${pagenation.pageNum};
var seqNo = obj;
var showMess = document.getElementById(seqNo);//出现BUG的时候所写的button的id值为“button”
if(showMess.value=='查看')
{
var state = 0;
showMess.value='正在处理';
window.location.href="<%=basePath%>changeState.do?seqNo="+seqNo+"&state="+state+"&pageNum="+pageNum;
}
else
{ if(confirm("您确定已经处理完了异常了吗?点击确定该条数据会从页面中删除"))
{
var state = 1;
window.location.href="<%=basePath%>changeState.do?seqNo="+seqNo+"&state="+state+"&pageNum="+pageNum;
//alert("该异常已经从页面中删除");
}
}
}
页面list对应的html代码:
<thead>
<tr>
<td width="5%">序号</td>
<td width="10%">标题</td>
<td width="45%">异常日志</td>
<td width="10%">操作</td>
</tr>
</thead>
<tbody>
<c:forEach items="${pagenation.data}" var="temp" varStatus="status">
<tr>
<td>${(pagenation.pageNum-1)*pagenation.size+status.count}</td>
<td>${temp.tittle }</td>
<td style="word-break:break-all;text-align:left;">${temp.content }</td>
<td><input type="button" id="${temp.seqNo }" name="button" value="${temp.state==0?"查看":"正在处理" }"
οnclick="javascript:change(${temp.seqNo })"/></td>
</tr>
</c:forEach>
</tbody>
错误原因:把button按钮的id值写成“button”,然而这些button是<c:foreach>循环得到的,导致了页面上所有button的id相同,从而相互收到影响。改成日志信息在数据库中的seq_no后,id唯一,问题解决
总结:自己看这个bug,根本就不知道问题出在哪,感觉是js的问题,可是就是不知道js的具体那一块出问题,完全没有重点,试着改了几个地方,可是完全不是那么回事。最后是问别人,首先说:肯定是页面上的错误。看了一下我的html代码,问了几个参数,一眼就看在了获取id对象的js那。
------------------------------做的见的是在太少,除了问题定位不准,决绝问题没有思路,瞎试。差距啊-----------------------------------