I ended up doing something similar to what you suggest, but I really
was hoping to elicit some clever way to get the value of the variable
at the time of the assignment, rather than the "5" that I get because
the closure is maintaining the context.

Is there a way to set these event handlers up in jQuery without using
a closure?

  --T

On Jan 30, 4:36 pm, "Josh Nathanson" <[EMAIL PROTECTED]> wrote:
> Instead of binding five times, you can do it dynamically:
>
> $("[id^=port]").click(function() {
>         bigchart( this.id.charAt(this.id.length-1) );
>
> });
>
> Something close to that should do it.  Although if you end up with 10 or
> more clickables you'll have to change your naming scheme a bit.
>
> -- Josh
>
> ----- Original Message -----
> From: "timothytoe" <[EMAIL PROTECTED]>
> To: "jQuery (English)" <jquery-en@googlegroups.com>
> Sent: Wednesday, January 30, 2008 12:10 PM
> Subject: [jQuery] Fighting a closure
>
> > I think I submitted a half-done version of this message by accident a
> > few minutes ago. Sorry.
>
> > This works:
> >  $("#port0").click(function() {bigchart(0)});
> >  $("#port1").click(function() {bigchart(1)});
> >  $("#port2").click(function() {bigchart(2)});
> >  $("#port3").click(function() {bigchart(3)});
> >  $("#port4").click(function() {bigchart(4)});
>
> > I try to roll it up like this:
> >  for (i=0;i<5;i++) {
> >    $("#port"+i).click(function() {bigchart(i)});
> >  }
>
> > But the closure gets me. When the function is called, i is 5 for any
> > of the buttons.
> > What is the elegant solution here?

Reply via email to