href with onClick javascript problem in new window

M

Mike

...
GOAL: (very simple) Provide a hyperlink which, when clicked,
calls a javascript function which opens a new URL.
...
PROBLEM: The following code works fine if I click to open in
the same window, but if I click the browser option to open in a
new window, the new window tries to open the href URL (the
onClick function does get executed, but seems to be ignored).
...
<script language="javascript">
function NewPage() {
location.href = "/cgi-bin/page1.pl";
}
</script>
...
<a href="noJS.htm" onClick="NewPage(); return false;">
...

I should have mentioned the following two things:

1. The above NewPage() function is just an example. The actual
function has to do some work to create the final target.

2. I originally tried just putting this into the href
href="javascript:NewPage();"
This worked fine for the same window, but when asking for a
new window, it tries to run NewPage() in the blank window,
which of course doesn't work.

Thanks,
Mike
 
G

Grant Wagner

Mike said:
I should have mentioned the following two things:

1. The above NewPage() function is just an example. The actual
function has to do some work to create the final target.

2. I originally tried just putting this into the href
href="javascript:NewPage();"
This worked fine for the same window, but when asking for a
new window, it tries to run NewPage() in the blank window,
which of course doesn't work.

Thanks,
Mike

<a href="noJS.htm" onclick="NewPage();return false;">

is the way to do it. I suggest you try it with:

<script type="text/javascript">
function NewPage() {
alert('here');
window.location.href = 'http://www.yahoo.com';
}
</script>

Once you have convinced yourself that the function is firing and
directing the browser to Yahoo!, you can begin to work on what is most
likely the real problem, which is that the "work" your script is doing
to build the URI is probably building an *incorrect* URI, or the code
itself has a syntax error. The way to confirm this is to use:

var uri = something;
uri += somethingElse;
uri += moreStuff + somethingDifferent;
alert(uri);
return;
window.location.href = uri;

Now you can closely examine the results of what you built and ensure
it is a valid URI. If you never get the alert, then the problem is a
syntax error in your code, which you can check by either
double-clicking the yellow "!" in the bottom left corner of Internet
Explorer or entering "javascript:" in the address bar of
Mozilla/Netscape/Firefox and hitting enter.

--
| Grant Wagner <[email protected]>

* Client-side Javascript and Netscape 4 DOM Reference available at:
*
http://devedge.netscape.com/library/manuals/2000/javascript/1.3/reference/frames.html

* Internet Explorer DOM Reference available at:
*
http://msdn.microsoft.com/workshop/author/dhtml/reference/dhtml_reference_entry.asp

* Netscape 6/7 DOM Reference available at:
* http://www.mozilla.org/docs/dom/domref/
* Tips for upgrading JavaScript for Netscape 7 / Mozilla
* http://www.mozilla.org/docs/web-developer/upgrade_2.html
 
M

Mike

Grant Wagner said:
<a href="noJS.htm" onclick="NewPage();return false;">

is the way to do it. I suggest you try it with:

<script type="text/javascript">
function NewPage() {
alert('here');
window.location.href = 'http://www.yahoo.com';
}
</script>

Once you have convinced yourself that the function is firing and
directing the browser to Yahoo!, you can begin to work on what is most
likely the real problem, which is that the "work" your script is doing
to build the URI is probably building an *incorrect* URI, or the code
itself has a syntax error. The way to confirm this is to use:
...

Thank you very much for the speedy reply with advice and
pointers to the other info.

Perhaps I should first clarify what I mean by "clicking the browser
option to open in a new window." By this I mean, with IE or NS, I
right click on the <a> object, and select "Open Link in New Window"
from pulldown.

Do I need to detect this differently than via onClick. Do I need
to detect the right mouse, and then figure out which of the pulldown
elements they asked for?

In any case, I did try your suggestion. Here is the exact code I ran:

<html>
<head>
<script type="text/javascript">
function NewPage() {
alert('here');
window.location.href = 'http://www.yahoo.com';
}
</script>
</head>
<body>
<a href="noJS.htm" onClick="NewPage(); return false;">CLICK</a>
</body>
</html>

If I open in the same window, the alert shows up and I get
to yahoo. If I open in new window (as described above) then it
does NOT fire the function, and just tries to open noJS.htm.

I also now see that in IE, if I right click on the <a> object,
and then select "Open Link" (which should then open it in the
same window), this also DOES NOT fire the function. It seems
that only the left mouse causes onClick to occur.

Thanks again. And sorry if I am being dense.

Mike
 
M

Mike

After referring to the IE DOM reference that Grant Wagner
pointed out in his followup, I see that the onClick event
only applies to the LEFT mouse button. There is another event
for the RIGHT context menu button (which I was using to get
the new window).

The NS solution is not so immediately obvious to me, but it
must be a similar thing.

Sorry for the unnecessary last post where I asked if I need
to detect right mouse differently. I should have looked at
those DOM references before posting.

Those pointers to the DOM referencese are a big help (I left
them in the inclusion below).
Thanks!
Mike
 
M

Mike

Here's a (partial) solution to my original post.

ORIGINAL GOAL: Provide a hyperlink which calls a javascript
function to create a new URL, which will work whether clicked
with the left mouse, or the right mouse context menu (e.g., to
open the URL in a new tab or a new window).

SOLUTION: This requires (1) detecting the right mouse click in
addition to the left, and (2) javascript function must set the
element.href and then return "true" (which allows the context
menu to work as normal, and then if the user does elect to open
the link, it will follow the replaced href).

The following works for at least IE6, NS7.1, Mozilla 1.6, but
not Opera. I can't see how to detect the right mouse click in
Opera, so if the user right clicks to open new page or window,
they will get noJS.htm. I did not try this with a Mac.

<script type="text/javascript">
function NewPage(element) {
// create desired URI and assign to the element's href.
target = "http://www.yahoo.com"
element.href = target;
}
</script>
...
<a href="noJS.htm"
onClick= "NewPage(this); return true;"
oncontextmenu="NewPage(this); return true;"> ... </a>

Mike
 
T

Thomas 'PointedEars' Lahn

Mike said:
Perhaps I should first clarify what I mean by "clicking the browser
option to open in a new window." By this I mean, with IE or NS, I
right click on the <a> object, and select "Open Link in New Window"
from pulldown.

And what about pressing the Shift or Ctrl key while clicking the link
or pressing the Return/Enter key? Have you ever heard of Tabbed Browsing?
Have you ever heard of Opera aso.? Have you ever heard of text browsers
like `lynx' or `links'? Have you ever heard of tools for disabled people
like screen readers and Braille lines?
Do I need to detect this differently than via onClick. Do I need
to detect the right mouse, and then figure out which of the pulldown
elements they asked for?

Much you have to learn, young apprentice. Do you really think that
crippling the browsing tool of your visitors via a technology that can be
restricted, disabled or not even present is a Good Thing? Do you really
think that every system has a pointing device? Do you really think that
every visitor makes use of such a device? Do you really think that every
visitor uses the same software (OS, UA, UA version)? Do I need to continue?

If you code for the Web, first you need to learn how the Web works.


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,769
Messages
2,569,578
Members
45,052
Latest member
LucyCarper

Latest Threads

Top