Firefox返回false; (preventDefault();)和window.location.reload();一起

时间:2014-12-14 13:02:00

标签: javascript php jquery firefox

我认为这是一个非常愚蠢的问题,但经过几个小时的谷歌 - 我不知道或解决方案。 重点是我需要在处理后重新加载页面"点击"在我的网站上的活动。在chrome \ opera中它的工作没有问题。但在Firefox中我有一些bug。我的JS代码带有注释:

$('#project_create').click(function() {
  var projectname = $("#project_name").val();
  var projectdescription = $("#project_description").val();
  $.post("projects/add_project.php", {
    project_name: projectname,
    project_description: projectdescription
  });
  $("#create_project_form").hide("slow");
  $("#project_list").show("slow");
  //return false; - if it uncomment, all work, but next page reloader doesn't work.
  window.location.reload(); //but if it's work, FireFox doesn't send $.post-query
});

我需要使用booth方法,因为点击后 - 脚本放入 $ _ SESSION [' my_var'] 某些变量,并且只有重新加载页面后才能使用该变量。也许有其他方法可以做到这一点?据我所知,firefox和 preventDefault();

的功能存在问题

谢谢!

3 个答案:

答案 0 :(得分:1)

当您执行return时,将不再访问该行之后的代码,并将其视为“死代码”。 One不会简单地将代码放在return

之后

另一个问题是,使用return false来防止默认默认操作时会出现问题。它可以防止委派/冒泡。在DOM树中连接起来的事件处理程序(尤其是与on()挂钩的事件)将不会被执行。如果授权很重要,请不要使用它。

如果您的目标是阻止链接的默认操作并在JS中执行操作,请改用event.preventDefaultevent对象作为处理程序中的第一个参数传入。

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

  // rest of the code
});

答案 1 :(得分:1)

问题是您在执行ajax请求之前重新加载页面。

尝试在ajax成功回调处理程序中重新加载页面:

$.post("projects/add_project.php", {
   project_name: projectname,
   project_description: projectdescription
}, function(){
   window.location.reload();
});

并删除旧的window.location.reload()

答案 2 :(得分:0)

除了其他答案建议的内容外,您还可以使用location.reload异步执行setTimeout方法:

setTimeout(function() { location.reload(); }, 1);
return false;

编辑: 运行异步AJAX请求并立即重新加载页面的整个想法是有缺陷的,当然,因为AJAX请求可能没有在您重新加载页面时完成。

因此,您应该使用回调,如接受的答案所示。或者,您可以使用同步AJAX请求,但这会冻结执行直到请求完成,这通常是不可取的。