Hi JoJo,

It seems you're doing a closure "by hand". You may want to look at
Function.bind() or Function.curry() in prototype documentation, since
they do it for you.
Your solution may become :
dynamicAnchor = new Element(
    'a', {
        href: 'javascript:void(0)'
    }
).observe(
    'click',
    (function(parameter,event) {
        window.status = parameter;
        event.stop();
    }).curry(localVariable)
);

Also note that I am 80% sure (please somebody confirm) that since your
parameter is a local variable, javascript will implicitly create a
closure for you.

In other words, this should work:
var localVariable= 'Hi!';
dynamicAnchor = new Element(
    'a', {
        href: 'javascript:void(0)'
    }
).observe(
    'click',
    function(event) {
        window.status = localVariable;
        event.stop();
    }
);

T.J.'s blog has many very well written articles that will explain you
why (http://blog.niftysnippets.org/search/label/closures).

Eric

On Oct 22, 8:47 pm, JoJo <tokyot...@gmail.com> wrote:
> Thanks T.J.
>
> The solution is:
>
> dynamicAnchor = new Element(
>     'a', {
>         href: 'javascript:void(0)'
>     }
> ).observe(
>     'click',
>     function(parameter) {
>         return function(event) {
>             window.status = parameter;
>             Event.stop(event);
>         }
>     }(localVariable)
> );
>
> On Oct 22, 4:39 am, "T.J. Crowder" <t...@crowdersoftware.com> wrote:
>
> > Hi,
>
> > See the documentation for `Event.observe`[1] (which is what you're
> > calling indirectly from the `Element#observe` function), specifically
> > the "Preventing the Default Event Action and Bubbling" part, and the
> > `Event` object[2]: You don't return false to cancel the `click` event,
> > you use the `Event#preventDefault` function (which is a standard DOM
> > function[3] that Prototype ensures is present even on implementations
> > that lack it) or, more likely, `Event#stop`[4] which both prevents the
> > default action and stops the event bubbling.
>
> > [1]http://api.prototypejs.org/dom/event/observe/
> > [2]http://api.prototypejs.org/dom/event/
> > [3]http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-Event-prev...
> > [4]http://api.prototypejs.org/dom/event/stop/
>
> > HTH,
> > --
> > T.J. Crowder
> > Independent Software Engineer
> > tj / crowder software / com
> > www / crowder software / com
>
> > On Oct 22, 2:41 am, JoJo <tokyot...@gmail.com> wrote:
>
> > > I use anchors to call javascript functions. Usually, I do this:
>
> > > <a href="javascript:void(0)" onclick="someFunc(); return false;">
> > >    call the function
> > > </a>
>
> > > This works fine in all browsers. Window.onbeforeunload is never
> > > triggered because the ONCLICK returns false, and thus the HREF if not
> > > executed. When HREF is not executed, the browser does not believe that
> > > the window in unloading. Now, I'm trying to create a dynamic anchor to
> > > accomplish the same thing. It looks nearly identical to the HTML
> > > anchor, but now it's triggering window.onbeforeunload in IE8. How do I
> > > not trigger it?
>
> > > dynamicAnchor = new Element(
> > >     'a', {
> > >         href: 'javascript:void(0)',
> > >     }
> > > ).observe(
> > >     'click',
> > >     function(parameter) {
> > >         return function() {
> > >             window.status = parameter;
> > >             return false;
> > >         }
> > >     }(localVariable)
> > > );
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Prototype & script.aculo.us" group.
To post to this group, send email to prototype-scriptacul...@googlegroups.com.
To unsubscribe from this group, send email to 
prototype-scriptaculous+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/prototype-scriptaculous?hl=en.

Reply via email to