2009-01-12 60 views
5

我有我的網頁代碼中的鏈接下面一行:爲什麼在Firefox中調用這個JQuery函數失敗?

<a href="javascript:$('#comment_form').toggle('normal')" title="Comment on this post"> 

這將產生應該彈開一個隱藏的表單的鏈接。它可以在Safari瀏覽器,但在Firefox,我只是得到什麼也沒有一個幾乎空白的頁面,但下面的文字:我敢肯定,這事做與jQuery函數的返回值

[object Object] 

,但我不確定如何修復JavaScript函數的調用,因此它也適用於Firefox。

回答

21

爲了愛......

<script type='text/javascript'> 
jQuery(function($){ # Document ready, access $ as jQuery in this scope 
    $("a#comment").click(function(){ # bind a click event on the A like with ID='comment' 
     $('#comment_form').toggleClass('normal'); # Toggle the class on the ID comment form 
     return false; # stop the href from being followed. 
    }); 
}); 
</script> 
.... 
<a id="comment" href="/you_need_javascript_sorry.html" title="Comment on this post"> 
    [Comment] 
</a> 

請不要嵌入的JavaScript像你剛纔在HTML一樣。

如果您在HTML中嵌入的JavaScript這樣的,你:

  1. 讓亂碼。
  2. 有奇怪的問題,就像你剛剛用黑客來解決它
  3. 用戶試圖中間點擊鏈接將無處被髮送。
  4. 維護散佈在頁面鏈接中的代碼的可執行部分將以失敗告終。
  5. 當用戶沒有javascript時請不要優雅地降級
  6. 當您開始需要執行超過2層深度的商店報價時,出現問題。
4

嘗試:

<a href="javascript:void($('#comment_form').toggle('normal'))" title="Comment on this post"> 

內附void()裏面的腳本將顯示執行的結果,抑制瀏覽器。


更新

我直接回答了原來的問題,與將採取的努力最少的解決方案。正如其中一些其他答案中提到的,我個人會將我的標記和JavaScript分開,並動態添加onclick處理程序,而不是將腳本嵌入到href屬性中。

+1

-1:這種方法相當過時。這對可訪問性不好。 – Greg 2009-01-12 17:28:13

+0

我很欣賞答案。它運行良好,但我會接受上面更深入的一個。 – mipadi 2009-01-12 17:49:22

2

您是否試過將href中的內容移至onclick?一般來說,您應該避免在href屬性中使用javascript。

+0

同意;如果你絕對必須在自己的標籤中有javascript(通常本身就是一個壞主意),至少要把它放在onclick屬性中。更好的方法可能是將單擊事件綁定到帶有jQuery的單獨腳本標記/文件中的鏈接。 – 2009-01-12 17:22:12

+0

這是正確的。我只是假設OP有一個很好的理由將它內聯。 – 2009-01-12 17:38:13

0
<a href="http://full-url-to-directory/page#comment_form" 
    onclick="$('#comment_form').toggle('normal');return false;" 
    title="Comment on this post"> 

雖然你需要做的服務器上的東西,這樣當你通過一個請求的默認是爲它是可見參考comment_form元素。這將允許(這部分)頁面在沒有啓用JavaScript的情況下工作。