为什么在Firefox中调用这个jQuery函数会失败?

时间:2009-01-12 17:09:54

标签: javascript jquery firefox

我的网页上的链接中包含以下代码:

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

这会生成一个应该弹出隐藏表单的链接。它适用于Safari,但在Firefox中,我只得到一个几乎为空的页面,只有以下文字:

[object Object]

我确定这与jQuery函数返回的值有关,但我不确定如何修复对JavaScript函数的调用,因此它也适用于Firefox。

4 个答案:

答案 0 :(得分: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>

请不要像在HTML中那样嵌入JavaScript。

如果您像这样在HTML中嵌入JavaScript,那么:

  1. 制作凌乱的代码。
  2. 像你这样的奇怪问题只是用黑客来解决它
  3. 尝试中间点击链接的用户将无处发送。
  4. 维护代码的可执行部分散布在页面链接中将以失败告终。
  5. 当用户没有javascript时,不要优雅降级
  6. 当你开始需要做超过2层深度的商店报价之类的东西时会出现问题。

答案 1 :(得分:4)

尝试:

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

void()中包含脚本将阻止浏览器显示执行结果。


<强>更新

我直接回答了原始问题,解决方案需要花费最少的精力。正如在其他一些答案中提到的那样,我个人会将我的标记和JavaScript分开并动态添加onclick处理程序,而不是将脚本嵌入href属性中。

答案 2 :(得分:2)

尝试将href中的内容移动到onclick上。通常,您应该避免在href属性中使用JavaScript代码。

答案 3 :(得分: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。