window.location doesn't seem to work

M

menkaur

Hey, guys!

I'm new to javascript, and i've got a problem with one of the simple
functions.

I am trying to redirect a user after he presses a button. Here is the
code:
<form method="post"
name="form2"
action="">
<center>
<label><input id="getRecomendation"
value="Get my recomendation"
type="submit"
name="getRecomendation"
onclick="giveRecomendation()">
<script type="text/javascript">
function giveRecomendation()
{
window.location = "foo.html";
//alert(window.location);
}

the page is run in Firefox from local hard drive.
if alert(window.location) is uncommented, everything works just fine.
but if i comment it, nothing happens.

what's wrong?
 
D

David Mark

Hey, guys!

I'm new to javascript, and i've got a problem with one of the simple
functions.

I am trying to redirect a user after he presses a button. Here is the
code:
<form method="post"
      name="form2"
      action="">
    <center>

Lose that (all of it).
        <label><input id="getRecomendation"

Validate your markup.
               value="Get my recomendation"
               type="submit"
type="button"

               name="getRecomendation"
               onclick="giveRecomendation()">
<script type="text/javascript">
  function giveRecomendation()
  {
      window.location = "foo.html";

window.location.href = "foo.html";
      //alert(window.location);
//window.alert(window.location.href);


}

But this button won't work without scripting (and why are you using a
button for a link anyway?) Good way to lose out on recommendations
from people who can't/won't enable JS on the Internet. You could use
a form and a submit button, but you would need to set the action to
foo.html. That wouldn't require any script, but neither would a
standard link.
 
M

menkaur

Lose that (all of it).


Validate your markup.


window.location.href = "foo.html";


But this button won't work without scripting (and why are you using a
button for a link anyway?)  Good way to lose out on recommendations
from people who can't/won't enable JS on the Internet.  You could use
a form and a submit button, but you would need to set the action to
foo.html.  That wouldn't require any script, but neither would a
standard link.

I'm using a button, because i'd like the customer to select options,
and, based on selected options redirect the customer to an appropriate
page.
 
A

Asen Bozhilov

Because internal setter of window.location will be execute
asynchronously, maybe in different thread. See the example:

window.location.href = 'http://google.com';
var arr = [];
for (var i = 0; i < 10; i++)
{
arr = i;
}
window.alert(arr);

Unfortunately, I don't see any documentation about that behavior of
window.location to read what exactly happens in internal setter of
window.location.

In your case, you should need to prevent default action of submit
button. Because, before created HTTP request from internal setter of
window.location, will be make HTTP/POST request to URL from action
attribute of form object.
 
D

David Mark

I'm using a button, because i'd like the customer to select options,
and, based on selected options redirect the customer to an appropriate
page.

You should use a form and do the redirect on the server. No JS
necessary.
 
T

Thomas 'PointedEars' Lahn

David said:
Validate your markup.

ACK said:
window.location.href = "foo.html";

There is no inherent advantage in using `.location.href' over `.location'.
In fact, by contrast the `href' property of Location instances is tainted,
and so subject to the SOP (that does not matter here).


PointedEars
 
T

Thomas 'PointedEars' Lahn

Asen said:
Unfortunately, I don't see any documentation about that behavior of
window.location to read what exactly happens in internal setter of
window.location.

<http://docs.sun.com/source/816-6408-10/window.htm#1202507>
In your case, you should need to prevent default action of submit
button.

No, the `submit' event of the form should be cancelled instead. Or a submit
button should not be used in the first place, or scripting should not be
used in the first place.


PointedEars
 
A

Asen Bozhilov

Thomas said:

Thanks for the links. They contains much more information from MDC,
but again i don't see any explanations about, how internal setter of
window.location works.
No, the `submit' event of the form should be cancelled instead.  
Yes, yes, yes. Apologize for my terminology here.

Nice to see, your correction again. Sometimes you are make ironical
comment, but when you corrected my, i learn properly terminology.
Thanks.
 
T

Thomas 'PointedEars' Lahn

Asen said:
Thanks for the links. They contains much more information from MDC,
but again i don't see any explanations about, how internal setter of
window.location works.

,-<http://docs.sun.com/source/816-6408-10/location.htm>
|
| Description
| [...]
| If you assign a string to the location property of an object, JavaScript
| creates a location object and assigns that string to its href property.

See also <http://docs.sun.com/source/816-6408-10/location.htm#1193550>:

| Description
|
| [...]
| Omitting a property name from the location object is equivalent to
| specifying location.href. [...]

RTSL of the respective DOM implementation, if available, for details.
Yes, yes, yes. Apologize for my terminology here.

Nice to see, your correction again. Sometimes you are make ironical
comment, but when you corrected my, i learn properly terminology.

It is not merely a matter of terminology here, though.

Preventing the default action of (or cancelling) the `click' event of the
submit button means, in a nutshell:

<input type="submit" ... onclick="return false">

Cancelling (or preventing the default action of) the `submit' event of the
form means, in a nutshell

<form ... onsubmit="return false">

The former approach is known to be error-prone and harder to maintain.

You are welcome.


PointedEars
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,756
Messages
2,569,535
Members
45,008
Latest member
obedient dusk

Latest Threads

Top