jQuery:event.preventdefault无法使用Firefox(mac和PC)

时间:2011-05-03 15:48:34

标签: 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.preventDefault){
event.preventDefault();
}else{
event.returnValue = false; 
};
$(this).parent().next().toggle(400);
});
});
</script> 

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

2 个答案:

答案 0 :(得分:16)

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

$("#rightcolumn h3 a").click(function(evt)
{
   evt.preventDefault();
   $(this).parent().next().toggle(400);
}

T.J.的评论关于将evt包含在函数()中的克劳德

  

您需要将参数声明为click处理程序(事件不是全局的,除了在IE和浏览器上向IE特定网站投掷骨骼。)请注意,您不需要(或想要)测试的preventDefault。 jQuery在没有本机提供它的浏览器上提供它

关于jQuery events

的更多解释

答案 1 :(得分:1)

您需要提供Event参数:

<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>

这个问题已在https://stackoverflow.com/a/17712808

中得到解答

请注意文档中的处理程序如何将此eventObject显示为传递给它的参数:http://api.jquery.com/click/

并注意Event对象如何具有preventDefault方法:http://api.jquery.com/category/events/event-object/