4

我有一点 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 中运行?

4

2 回答 2

16

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

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

TJ Crowder 关于在 function() 中包含 evt 的评论

您需要向单击处理程序声明参数(事件不是全局的,除非在 IE 和向 IE 特定网站抛出骨骼的浏览器上)。请注意,您不需要(或不想要)preventDefault 的测试。jQuery 在本机不提供它的浏览器上提供它

更多关于jQuery 事件的解释

于 2011-05-03T15:50:58.720 回答
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/

于 2013-11-30T11:29:04.770 回答