Posted on 2010-03-01 09:22
彭天皓 阅读(539)
评论(0) 编辑 收藏 所属分类:
java --ssh
前几天做的项目,今天老大点击查看的时候 js出错,只能重新请求,在来一次,由于是级联的,就是上面的做了才能做下面的,而js 出错会对操作造成非常不便。
我的开发框架是ssh。
我调用的js
function search_report() {
var form = document.getElementById("form1");
form.action = "search_report.action";
form.submit();
}
调用的链接:
<a href="#" onclick="search_report()">查询</a>
如果你看到这里就知道这个js为什么出错,那么这篇文章完全是在浪费你的时间。
错误答案是:
我们点击一次查询后,在点击查询就会抱这个错误:
那我把链接改为:
<a href="javascript:search_report()">查询</a>
则不会报任何错误。
当然做到这里也算问题解决了,可是为什么会出现这种错误呢?
根据比较,我觉得是 href=“#” 惹得祸,所以
我到google上百度了一下,找到这篇文章:
http://www.cnblogs.com/xiang/archive/2006/09/05/495828.html
文章中这么说:
#包含了一个位置信息 默认的锚点是#top 也就是网页的上端 而javascript:void(0) 仅仅表示一个死链接
这就是为什么有的时候页面很长浏览链接明明是#可是 跳动到了页首
而javascript:void(0) 则不是如此 所以调用脚本的时候最好用void(0) 或者<input onclick> <div onclick>等
看了之后,真的是这样的吗?我仍然持怀疑态度,也没搞明白就跑去问项目经理
后来经项目经理用火狐浏览器跟踪调试之后发现事实并非如此,(火狐调试我还不怎么熟悉,我还只是 初学者)
原来是由于 请求名和js方法名 同名造成的。因为浏览器缓存会记录上次请求的记录,当我第一次点击时,浏览器真确找到了 该方法,但
当我第二次点击的时候 就会找不到此方法,原来是 search_report 和 search_report.action 即 方法名和请求名是一样的,由于浏览器的缓存处理,浏览器把search_report当做是请求来做 当然找不到js方法了,修改方法 就是 把方法名和请求名改成不同的 就可以了。所以在做ssh开发 的时候 javascript 里的方法 最好不要和 请求名(*.action)一样,如果要一样就使用<a href="javascript:search_report()">查询</a>,否则会造成客户端错误,带来不必要的麻烦。