表单中的onsubmit事件中window.location.href不起作用

12
所以我有一个表单,其中onsubmit="return reg_check(this)",而reg_check()是头部中的javascript函数,应该检查表单数据,并且由于其中一个任务是检查用户名是否在需要php的数据库中,所以我想重定向到执行此任务的php页面。
问题是:window.location.href不起作用!这是函数的简化版本,当然main.php只是我得到的一个随机页面:
function reg_check(myForm) {
    alert("before redirect..");
    window.location.href = "http://localhost/main.php?width=" + screen.width + "&height=" + screen.height;
    alert("after redirect..");
}

“before redirect”和“after redirect”的提示框可以正常显示,只是页面没有跳转。同样地,如果我尝试在body中直接键入重定向的URL:

<script type="text/javascript">
    alert("before redirect..");
    window.location.href = "http://localhost/main.php?width=" + screen.width + "&height=" + screen.height;
    alert("after redirect..");
</script>

它会重定向。

有什么办法可以让它起作用吗?

4个回答

39

你需要从reg_check函数中返回false;,然后在提交表单时将其更改为:

onsubmit="return reg_check(this);"
这将取消表单提交。如果你想让表单正常提交,只需从 reg_check 返回 true 即可。 编辑(为了更清楚,您需要从函数中添加 return false;):
function reg_check(myForm) {
    alert("before redirect..");
    window.location.href = "http://localhost/main.php?width=" + screen.width + "&height=" + screen.height;
    return false;
}

1
哎?那你的问题是什么?这解决了我原以为你在问的问题。我的回答不同之处在于你需要从你的函数中返回false; 我会更新答案,使其更加清晰。 - Craig
在您更新的评论中,您还必须从函数中删除alert("after redirect..");,因为这在重定向后逻辑上不可能发生。然后您就可以继续了。 - Craig
1
实际上还有一个评论,你应该使用window.location而不是window.location.href,因为在某些浏览器中可能会遇到问题。我相信IE6就是其中之一。 - Craig
@Craig - 你真是个天才...我简直不敢相信我已经浪费了一个小时来搞定这个问题,而我所需要的只是一个"return"和一个"return false"。谢谢! - iTrout
@Craig 如果我想要在正确提交后重新加载页面,该怎么办? - Summer Sun
显示剩余5条评论

2

我曾在IE中遇到问题,不得不采取以下措施:

window.location.assign(url);

具体来说,是在jQuery AJAX成功处理程序中。我不能推测其他原因,只能说对我而言是有效的。

实际上,我确实做到了。

window.location.replace(url)

该方法用于替换当前页面的历史记录。真是个好技巧!


在某些浏览器上,如果(url)与当前地址栏的url相同,则它将无法工作。 - Nadav

1

-1

[已解决] 我曾经遇到过类似的问题,需要从客户端脚本重定向到其他网址。我改用了window.open函数,问题得以解决。例如,您可能有一个名为ChangeCity()的函数,用于处理html控件事件,并在onchange事件中调用它。

function ChangeCity() {
    switch ($("#currentCity").val()) {
        case "NY":
              var url = '@Url.Action("New York City", "Home", new { @area = "" },Request.Url.Scheme)';
            window.location.href = url;
            window.open(url,"_top");
            return false;

/* 其他城市的情况 */

    }

您可能想要探索有关窗口位置.href重定向-替代解决方案的详细信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接