window.location.href не перенаправляет

Я знаю, что этот вопрос много обсуждается, но я не могу понять, почему он не работает для меня.

Это моя функция:

function ShowComments(){

 alert("fired");
 var movieShareId = document.getElementById('movieId');
 //alert("found div" + movieShareId.textContent || movieShareId.innerText);
 //alert("redirect location: /comments.aspx?id=" + movieShareId.textContent || movieShareId.innerText + "/");
 window.location.href = "/comments.aspx?id=" + movieShareId.textContent || movieShareId.innerText + "/";
 var newLocation = window.location;
 //alert("full location: " + window.location);

}

Если у меня есть предупреждения без комментариев или если у меня открыта bugzilla Mozilla, она работает нормально, в противном случае она не перенаправляет на другую страницу.

Есть идеи, почему?


person user2235124    schedule 02.04.2013    source источник
comment
В чем смысл `var newLocation = window.location;`? После изменения window.location никакая строка не должна выполняться.   -  person Denys Séguret    schedule 02.04.2013
comment
Как вы вызываете функцию? Вы делаете что-то еще, что может помешать смене местоположения?   -  person Guffa    schedule 02.04.2013


Ответы (10)


Если вы вызываете эту функцию с помощью кнопки отправки. Это может быть причиной того, что браузер не выполняет перенаправление. Он запустит код в функции, а затем отправит страницу вместо перенаправления. В этом случае измените тег типа вашей кнопки.

person Jose    schedule 15.01.2014
comment
Спасибо. Очень помогло. У меня была кнопка типа «отправить». Изменил его на «сброс», и все заработало. - person richie; 07.03.2014
comment
Собственно, проблема такого рода часто возникает из-за всплытия события щелчка или ввода и отправки формы. - person Alex; 07.01.2015
comment
Вы абсолютно сделали мой день. 12 часов поиска в Google и stackoverflow. Верхний. - person MDaldoss; 17.09.2016
comment
Интересно, что даже если моя кнопка не была submit, она не работала, потому что находилась внутри формы. Мне пришлось вынести его наружу, и все заработало. - person NecipAllef; 26.10.2016
comment
Это была моя проблема с кнопкой, у которой НЕТ вызова типа, установка type = 'button' устранила проблему. Спасибо! - person Ryan Gibbs; 07.09.2017
comment
Я использовал onclick в ссылке, но не работал. Смена ссылки на button сработала! - person curtisp; 13.02.2020
comment
Чувак, большое тебе спасибо, я пытался найти это часами! - person Kevin Sullivan; 12.09.2020
comment
Поведение по умолчанию для <button />, если внутри <form /> всегда является поведением submit. Чтобы выполнять внешние манипуляции в области ReactJs, использование <button type"button" /> - это решение! Спасибо ! См. здесь - person etiennejcharles; 04.05.2021

Из этого ответа

window.location.href не работает

вам просто нужно добавить

return false;

внизу вашей функции

person Sruit A.Suk    schedule 06.12.2017

Решение отсюда: http://www.codeproject.com/Questions/727493/JavaScript-document-location-href-not-working

document.location.href = 'Your url',true;
person komal thakkar    schedule 24.08.2016

Некоторые скобки отсутствуют.

Изменять

 window.location.href = "/comments.aspx?id=" + movieShareId.textContent || movieShareId.innerText + "/";

to

 window.location = "/comments.aspx?id=" + (movieShareId.textContent || movieShareId.innerText) + "/";

|| не имеет приоритета по сравнению с +.

Удалите также все, что находится после присвоения window.location: этот код не должен выполняться при изменении страницы.

Примечание: вам не нужно устанавливать location.href. Достаточно просто установить location.

person Denys Séguret    schedule 02.04.2013
comment
@ user2235124 Думаю, на вашей странице есть и другие проблемы. И тот факт, что у вас есть код после назначения местоположения, заставляет меня подозревать более серьезные логические проблемы. Можете ли вы создать скрипку, показывающую вашу проблему? - person Denys Séguret; 02.04.2013

Убедитесь, что вы не отправляете знак «#» в конце URL-адреса. В моем случае это мешало работе window.location.href.

person Luis Gouveia    schedule 15.02.2018
comment
да, то же самое, разве нет родного решения проблемы? - person Omar N Shamali; 24.02.2021
comment
Обратите внимание: перенаправление с хешем будет работать, если вы включаете его до или без каких-либо параметров строки запроса. - person Gabe; 16.04.2021

window.location.replace - лучший способ имитировать перенаправление:

function ShowComments(){
    var movieShareId = document.getElementById('movieId');
    window.location.replace("/comments.aspx?id=" + (movieShareId.textContent || movieShareId.innerText) + "/");
}

Дополнительную информацию о том, почему window.location.replace является лучшим перенаправлением javascript, можно найти прямо здесь.

person Eldar    schedule 02.04.2013
comment
В ответе, на который вы ссылаетесь, говорится о следах в истории. Не понимаю, насколько это актуально. - person Denys Séguret; 02.04.2013

Я дам вам одну приятную функцию для этой проблемы:

function url_redirect(url){
    var X = setTimeout(function(){
        window.location.replace(url);
        return true;
    },300);

    if( window.location = url ){
        clearTimeout(X);
        return true;
    } else {
        if( window.location.href = url ){
            clearTimeout(X);
            return true;
        }else{
            clearTimeout(X);
            window.location.replace(url);
            return true;
        }
    }
    return false;
};

Это универсальное рабочее решение window.location проблемы. В некоторых браузерах возникают проблемы с window.location.href, а также иногда может случиться window.location сбой. Вот почему мы также используем window.location.replace() для любого случая и тайм-аут для «последней попытки».

person Ivijan Stefan Stipić    schedule 10.12.2018

Вы не можете использовать window.location.replace или document.location.href или любой из ваших любимых ванильных методов javascript для перенаправления страницы на себя.

Поэтому, если вы динамически добавляете путь перенаправления из серверной части или извлекаете его из тега данных, убедитесь, что на каком-то этапе вы действительно проверяете перенаправления на текущую страницу. Это может быть очень просто:

if(window.location.href == linkout)
{
    location.reload();
}
else
{
    window.location.href = linkout;
}
person Paulus    schedule 27.05.2019

В моем случае он работает должным образом для всех браузеров после установки временного интервала.

setTimeout(function(){document.location.href = "myNextPage.html;"},100);
person Aijaj Hussain Ansari    schedule 03.02.2020

window.location.href не работал в Android. Я очистил кеш в Android Chrome, и все работает нормально. Посоветуйте сначала попробовать это, прежде чем заниматься различными кодами.

person user12678669    schedule 08.01.2020