preventDefault不适用于Firefox

时间:2009-09-02 11:40:19

标签: javascript jquery cross-browser

我试图阻止A HREF实际打开链接,但是要执行脚本。我让脚本部分工作,但似乎Firefox会忽略它:

$("#permalink a").click(function(id){
  $("#newPost").fadeToggle;
  event.preventDefault();
  var id = this.getAttribute('href');
  $("#newPostContent").load(id);
  $("#newPost").show("fast");
});

有人可以建议使用跨浏览器脚本来防止默认设置吗?

4 个答案:

答案 0 :(得分:29)

此标准解决方案是return false处理程序中的click()return false相当于在活动中调用preventDefault()stopPropagation()preventDefault()也适用于此任务,因此它或return false都可以正常工作。

您的问题似乎是语法错误和错误命名的参数。我明白了:

  • fadeToggle没有括号;
  • 函数参数名为id,但您调用event.preventDefault();和
  • 你正在淡化帖子然后立即显示它?这将排队两个动画,但没有多大意义。您可能希望以合理的方式将这两件事和load()链接在一起。

所以这应该有效:

$("#permalink a").click(function(event) {
  $("#newPost").fadeToggle();
  var id = this.getAttribute('href');
  $("#newPostContent").load(id);
  $("#newPost").show("fast");
  return false;
});

在此实例中,您可以使用return false自由替换event.preventDefault(),但传播的click()事件可能会或可能会导致其他问题,具体取决于您拥有的其他事件处理程序。

答案 1 :(得分:20)

这始终有效: Firefox需要“事件处理程序”,而Chrome则不需要。所以这适用于所有浏览器:

$('#id_obj').click(function(event) {   
     event.preventDefault(event);  
}

答案 2 :(得分:14)

            $("#permalink a").click(function(id){

应该是

            $("#permalink a").click(function(event){

然后

var id=event.target;

将为您提供正在处理的对象,event.preventDefault()将停止默认操作。

通常我会返回false;我自己,但这都会阻止默认操作停止事件的传播,这可能会产生您对其他事件处理程序没有预期的影响。

答案 3 :(得分:-1)

你应该能够return false;