48

I know this is a question much discussed but I can't figure out why it does not work for me.

This is my function:

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);

}

If I have the alerts uncommented or if I have Mozilla's bugzilla open it works fine, otherwise it does not redirect to the other page.

Any ideas why?

3
  • 2
    What's the point of ` var newLocation = window.location;` ? No line should be executed after the window.location change. Commented Apr 2, 2013 at 8:06
  • How are you calling the function? Are you doing something else at that point that may interfer with the change of location? Commented Apr 2, 2013 at 8:08
  • Does this answer your question? How to prevent mailto event from opening a new tab in browser Commented Apr 2, 2023 at 17:33

11 Answers 11

97

If you are calling this function through a submit button. This may be the reason why the browser does not redirect. It will run the code in the function and then submit the page instead of redirect. In this case change the type tag of your button.

Sign up to request clarification or add additional context in comments.

10 Comments

Thanks. Helped a lot. I had my button 'type' as 'submit'. Changed it to 'reset' and it worked.
You absolutely made my day. 12h of google and stackoverflow searching for that. Top.
Interestingly enough, even if my button was not submit, it didn't work cause it was inside a form. I had to move it outside then it worked.
This was my issue for a button that had NO type call out, putting type='button' fixed the issue. Thanks!
To add here, if you still want to have button[type=submit] and handle the redirection in the form's submit event, you can also call event.preventDefault() in the event handler--setting window.location.href should then properly redirect.
|
37

From this answer,

window.location.href not working

you just need to add

return false;

at the bottom of your function

2 Comments

didnt work for me
Adding this destroyed the redirect.
9

Some parenthesis are missing.

Change

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

to

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

No priority is given to the || compared to the +.

Remove also everything after the window.location assignation : this code isn't supposed to be executed as the page changes.

Note: you don't need to set location.href. It's enough to just set location.

1 Comment

@user2235124 There are other problems in your page, I think. And the fact you have some code after the location assignment makes me suspect bigger logical problems. Can you build a fiddle showing your issue ?
8

Solution from here: http://www.codeproject.com/Questions/727493/JavaScript-document-location-href-not-working

document.location.href = 'Your url',true;

Comments

6

Make sure you're not sending a '#' at the end of your URL. In my case, that was preventing window.location.href from working.

2 Comments

yea same here, isn't there any native overcome to the issue?
Note, the redirect with a hash will work if you are including it before or without any querystring parameters.
6

You can't use window.location.replace or document.location.href or any of your favourite vanilla javascript methods to redirect a page to itself.

So if you're dynamically adding in the redirect path from the back end, or pulling it from a data tag, make sure you do check at some stage for redirects to the current page. It could be as simple as:

if(window.location.href == linkout)
{
    location.reload();
}
else
{
    window.location.href = linkout;
}

Comments

4

I'll give you one nice function for this problem:

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;
};

This is universal working solution for the window.location problem. Some browsers go into problem with window.location.href and also sometimes can happen that window.location fail. That's why we also use window.location.replace() for any case and timeout for the "last try".

Comments

3

window.location.replace is the best way to emulate a redirect:

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

More information about why window.location.replace is the best javascript redirect can be found right here.

1 Comment

The point made in the answer you link to is about the trace in history. I don't see how it's relevant.
2

In my case it is working as expected for all browsers after setting time interval.

setTimeout(function(){document.location.href = "myNextPage.html";},100);

Comments

0

window.location.href wasn't working in Android. I cleared cache in Android Chrome and it works fine. Suggest trying this first before getting involved in various coding.

Comments

0

Go to your api route, make sure you are not missing a response such as

res.status(200).json(data); 

1 Comment

As it’s currently written, your answer is unclear. Please edit to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers in the help center.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.