前幾天做的項目,今天老大點擊查看的時候 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) 僅僅表示一個死鏈接
這就是為什么有的時候頁面很長瀏覽鏈接明明是??墒?nbsp; 跳動到了頁首
而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>,否則會造成客戶端錯誤,帶來不必要的麻煩。