Window.location.href не работает в форме onsubmit

Итак, у меня есть форма и 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, она просто не перенаправляется? Он остается на той же странице.

Кроме того, если я попытался перенаправить из тела, просто набрав:

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

он перенаправляет.

Любые идеи о том, как я могу заставить это работать?

Ответ 1

Вам нужно return false; от вашей функции reg_check, а затем в вашем onsubmit, измените его на:

onsubmit="return reg_check(this);"

Это отменит отправку формы. И если вы хотите, чтобы форма была представлена ​​как обычная, просто верните true из reg_check.

Изменить (чтобы быть более ясным, вам нужно добавить return false, из вашей функции):

function reg_check(myForm) {
    alert("before redirect..");
    window.location.href = "http://localhost/main.php?width=" + screen.width + "&height=" + screen.height;
    return false;
}

Ответ 2

Я видел проблемы в IE, где мне приходилось делать следующее:

window.location.assign(url);

В частности, в обработчике успеха JQuery AJAX. Не могу догадаться, почему, кроме меня, это сработало.

На самом деле я сделал

window.location.replace(url)

Что заменяет текущую страницу в истории. Хороший трюк, который!

Ответ 4

[RESOLVED] У меня была аналогичная проблема при перенаправлении на другой URL-адрес от клиента script. Вместо этого реализована функция window.open, и она сработала. У вас может быть, например, функция say 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;

/* случаи для других городов */

    }

Вам может понравиться подробнее узнать о window.location.href redirection -Alternative Solution