我认为这是一个非常愚蠢的问题,但经过几个小时的谷歌 - 我不知道或解决方案。 重点是我需要在处理后重新加载页面"点击"在我的网站上的活动。在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();
的功能存在问题谢谢!
答案 0 :(得分:1)
当您执行return
时,将不再访问该行之后的代码,并将其视为“死代码”。 One不会简单地将代码放在return
。
另一个问题是,使用return false
来防止默认默认操作时会出现问题。它可以防止委派/冒泡。在DOM树中连接起来的事件处理程序(尤其是与on()
挂钩的事件)将不会被执行。如果授权很重要,请不要使用它。
如果您的目标是阻止链接的默认操作并在JS中执行操作,请改用event.preventDefault
。 event
对象作为处理程序中的第一个参数传入。
$('#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请求,但这会冻结执行直到请求完成,这通常是不可取的。