jQuery:event.preventdefault不能与Firefox(mac和PC)一起使用

jQuery:event.preventdefault不能与Firefox(mac和PC)一起使用,jquery,firefox,toggle,preventdefault,Jquery,Firefox,Toggle,Preventdefault,我用jQuery在H3链接后切换段落。它在PC上的IE和Chrome中工作,在Mac上的Safari和Chrome中工作。在这两个平台上的Firefox上,点击链接什么都不做 <script type="text/javascript"> $(document).ready(function(){ $("#rightcolumn .article .collapse").hide(); $("#rightcolumn h3 a").click(function(){ if(event

我用jQuery在H3链接后切换段落。它在PC上的IE和Chrome中工作,在Mac上的Safari和Chrome中工作。在这两个平台上的Firefox上,点击链接什么都不做

<script type="text/javascript">
$(document).ready(function(){
$("#rightcolumn .article .collapse").hide();
$("#rightcolumn h3 a").click(function(){
if(event.preventDefault){
event.preventDefault();
}else{
event.returnValue = false; 
};
$(this).parent().next().toggle(400);
});
});
</script> 

$(文档).ready(函数(){
$(“#rightcolumn.article.collapse”).hide();
$(“#右栏h3 a”)。单击(函数(){
if(event.preventDefault){
event.preventDefault();
}否则{
event.returnValue=false;
};
$(this).parent().next().toggle(400);
});
});

如果禁用event.preventDefault();这在Firefox中是有效的,但是我当然会让页面跳到我不想要的顶部。我该怎么做才能让它在Firefox中工作?

您的函数缺少事件声明。此外,作为惯例,我看到大多数示例使用evt作为变量名

$("#rightcolumn h3 a").click(function(evt)
{
   evt.preventDefault();
   $(this).parent().next().toggle(400);
}
T.J.Crowder关于将evt包括在函数()中的评论

您需要向click处理程序声明参数(事件不是全局的,IE和浏览器除外,这些浏览器会向IE特定的网站抛出一根骨头。)并注意,您不需要(或不希望)对preventDefault进行测试。jQuery在本机不提供它的浏览器上提供它


有关

的更多说明您需要提供事件参数:

<script type="text/javascript">
$(document).ready(function(){
$("#rightcolumn .article .collapse").hide();
$("#rightcolumn h3 a").click(function(event){
if(event.preventDefault){
event.preventDefault();
}else{
event.returnValue = false; 
};
$(this).parent().next().toggle(400);
});
});
</script>

$(文档).ready(函数(){
$(“#rightcolumn.article.collapse”).hide();
$(“#右侧h3 a列”)。单击(函数(事件){
if(event.preventDefault){
event.preventDefault();
}否则{
event.returnValue=false;
};
$(this).parent().next().toggle(400);
});
});
这个问题在这里已经得到了回答

注意文档中的处理程序如何将此eventObject显示为传递给它的参数:


请注意Event对象如何使用preventDefault方法:

try
Event.stopPropagation()
aswell@Thomas:与是否传播无关。问题是他没有声明函数参数,因此在非IE浏览器上,调用
事件
上的任何内容都会抛出异常,因为
事件
未定义。看尼基的回答。@T.J是的,你说得对。我忘记了stopProgagation的真正含义,因为它帮助我解决了一些模糊的问题。谢谢你的提醒。有了这样的回答,我建议你告诉他们你改变了什么,以及你的例子@安迪:您需要向
点击
处理程序声明参数(
事件
不是全局的,除非在IE和浏览器上对IE特定网站有影响。)注意,您不需要(或不希望)测试
默认值。jQuery在不以本机方式提供的浏览器上提供它。@t.J.Crowder很好,我正要冲出这里。我已经更新了我的答案谢谢Nicky!工作完美。感谢您的及时回复。:)没问题。我之前有点匆忙,所以我会更新我的答案,让T.J.解释为什么需要这样做。此外,如果您对解决方案感到满意,那么将其标记为