1. 程式人生 > >jsp頁面不執行當前頁面的js方法

jsp頁面不執行當前頁面的js方法

遇到一個問題,頁面<a href="javascritpt"test();"></a>, 執行方法的時候,test()已經在本頁面定義,跟蹤程式發現test()函式在request中,而瀏覽器去servlet中去找被呼叫的test()函數了,以下是解決方法:

應該是<a href="#" onclick="javascritpt"test();"></a>

以下是相關轉載:

本文都基於群裡一個朋友提出的一個問題:

href="#"  和href="javascript:void(0);" 這哪個好些 ?

在說這個問題之前,我想應該思考一下,我們為什麼要在頁面不需要跳轉的情況下選擇<a>標籤?

其實很大程度是是因為IE6,IE6只支援<a>的:hover偽類,所以要為了節約javascript來模擬hover的編碼,<a>就是一個很好的選擇。

但是使用<a>會導致一個問題:如果不新增href屬性,那麼css裡的hover效果將會失效,如果添加了href,那麼href應該何去何從呢.大部分情況下我們都不希望它跳轉(阻止跳轉).

而阻止跳轉常見的有下面四種方式:

1. <a href="javascript:;" onclick="action();">link</a> 

2. <a href="javascript:void(0);"

 onclick="action();">link</a> 

3. <a href="###" onclick="action();">link</a> 

4. <a href="#" onclick="action();return false;">link</a>  

事實上這四種方式都可以很正常的工作。

第1和第2中可以歸為一類,使用javascript 偽協議,只要什麼都不返回,那麼瀏覽器將不會跳轉

第3種比較有意思,它使用了一個錨點(跳轉到id或name為##的位置),在瀏覽器中, 如果一個錨點不存在,那麼也不會跳轉

第4種是在執行onclick的最後處加上return false, 這樣就阻止了瀏覽器執行預設行為

,同樣就阻止了跳轉

我以往的經驗都證明第4種是最穩妥的方式,因為第2種和第2種都會在ie6下出現bug:

當A被點選, action() 函式裡如果有設定location,設定img.src,設定iframe.src 行為,從而導致一個新的資源下載時,ie6會中斷掉該行為。

第三種真的穩妥麼,或許我們可以猜測一下錨點的工作方式,

當<a>元素被點選,瀏覽器發現href="###" ,首先要判斷這個href是否需要跳轉到別的頁面,如果不需要,那麼瀏覽器會將href後面兩個##取出來,然後遍歷DOM樹,找到第一個id(或者name)的值為##的,呼叫內部方法,使瀏覽器滾動到相應的位置 ,如果一個匹配的也沒有找到,那麼瀏覽器什麼也不做。

而這個過程中, 瀏覽器需要做的事情可能還有

- 啟動載入中提示

- 發出跳轉提示音(ie6,ie7) 

總之,###會導致瀏覽器執行一系列的預設行為(是否有效能問題?), 包括ie6 7非常討厭的提示音,而只要我們阻止了預設行為,這一切都不會發生。

所以結論是,儘量不要使用href="javascript:;" href="###" ,而統一使用 onclick="return false;" ,這是安全的,也是體驗最好的。

轉載部落格園 wait的部落格