火狐返回假;(防止默认();)和 window.location.reload();一起

Firefox return false; (preventDefault();) and window.location.reload(); together

本文关键字:window location 一起 reload 返回 火狐 默认      更新时间:2023-09-26

我认为这是一个非常愚蠢的问题,但经过几个小时的谷歌搜索 - 我不知道或解决方案。关键是我需要在我的网站上处理"点击"事件后重新加载页面。在chrome''opera中,它可以毫无问题地工作。但是在火狐中我有一些错误。我的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
});

我需要工作摊位方法,因为点击后 - 脚本放入 $_SESSION['my_var'] 一些变量,并且它的变量仅在重新加载页面后可用。也许还有其他方法可以做到这一点?正如我所理解的那样,火狐和 preventDefault() 的功能中存在问题;

谢谢!

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

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

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

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

当你做一个return时,该行之后的代码将不再被访问,被认为是"死代码"。人们不会简单地将代码放在return之后。

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

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

$('#project_create').click(function(event) {
  event.preventDefault();
  // rest of the code
});

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

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

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

因此,您应该按照接受的答案的建议使用回调。或者,您可以使用同步 AJAX 请求,但这会在请求完成之前冻结执行,这通常是不可取的。