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?