JavaScript 對(duì)象不支持此錯(cuò)誤和方法
Posted on 2010-03-01 09:22 彭天皓 閱讀(545) 評(píng)論(0) 編輯 收藏 所屬分類: java --ssh 前幾天做的項(xiàng)目,今天老大點(diǎn)擊查看的時(shí)候 js出錯(cuò),只能重新請(qǐng)求,在來一次,由于是級(jí)聯(lián)的,就是上面的做了才能做下面的,而js 出錯(cuò)會(huì)對(duì)操作造成非常不便。
我的開發(fā)框架是ssh。
我調(diào)用的js
function search_report() {
var form = document.getElementById("form1");
form.action = "search_report.action";
form.submit();
}
調(diào)用的鏈接:
<a href="#" onclick="search_report()">查詢</a>
如果你看到這里就知道這個(gè)js為什么出錯(cuò),那么這篇文章完全是在浪費(fèi)你的時(shí)間。
錯(cuò)誤答案是:
我們點(diǎn)擊一次查詢后,在點(diǎn)擊查詢就會(huì)抱這個(gè)錯(cuò)誤:
那我把鏈接改為:
<a href="javascript:search_report()">查詢</a>
則不會(huì)報(bào)任何錯(cuò)誤。
當(dāng)然做到這里也算問題解決了,可是為什么會(huì)出現(xiàn)這種錯(cuò)誤呢?
根據(jù)比較,我覺得是 href=“#” 惹得禍,所以
我到google上百度了一下,找到這篇文章:
http://www.cnblogs.com/xiang/archive/2006/09/05/495828.html
文章中這么說:
#包含了一個(gè)位置信息 默認(rèn)的錨點(diǎn)是#top 也就是網(wǎng)頁的上端 而javascript:void(0) 僅僅表示一個(gè)死鏈接
這就是為什么有的時(shí)候頁面很長瀏覽鏈接明明是#可是 跳動(dòng)到了頁首
而javascript:void(0) 則不是如此 所以調(diào)用腳本的時(shí)候最好用void(0) 或者<input onclick> <div onclick>等
看了之后,真的是這樣的嗎?我仍然持懷疑態(tài)度,也沒搞明白就跑去問項(xiàng)目經(jīng)理
后來經(jīng)項(xiàng)目經(jīng)理用火狐瀏覽器跟蹤調(diào)試之后發(fā)現(xiàn)事實(shí)并非如此,(火狐調(diào)試我還不怎么熟悉,我還只是 初學(xué)者)
原來是由于 請(qǐng)求名和js方法名 同名造成的。因?yàn)闉g覽器緩存會(huì)記錄上次請(qǐng)求的記錄,當(dāng)我第一次點(diǎn)擊時(shí),瀏覽器真確找到了 該方法,但
當(dāng)我第二次點(diǎn)擊的時(shí)候 就會(huì)找不到此方法,原來是 search_report 和 search_report.action 即 方法名和請(qǐng)求名是一樣的,由于瀏覽器的緩存處理,瀏覽器把search_report當(dāng)做是請(qǐng)求來做 當(dāng)然找不到j(luò)s方法了,修改方法 就是 把方法名和請(qǐng)求名改成不同的 就可以了。所以在做ssh開發(fā) 的時(shí)候 javascript 里的方法 最好不要和 請(qǐng)求名(*.action)一樣,如果要一樣就使用<a href="javascript:search_report()">查詢</a>,否則會(huì)造成客戶端錯(cuò)誤,帶來不必要的麻煩。