2009-01-12 58 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的情况下工作。