rewriting a func. using a loop, not working
i'm trying to re-write the following function using a loop but it's not working and i don't know why.
PHP Code:
$(function () {
$( '#acchdr1' ). click (function(){
runAccordion ( 1 );
});
$( '#acchdr2' ). click (function(){
runAccordion ( 2 );
});
$( '#acchdr3' ). click (function(){
runAccordion ( 3 );
}); //etc., etc.,
so instead, i tried this,.....
PHP Code:
$(function () {
hdrNum = 11 ;
for( i = 0 ; i < hdrNun ; i ++) {
$( '#acchdr' + i ). click (function(){
runAccordion ( i );
});
}
})
the result is that the only the last header opens (#11). Here's my online example:
http://www.tomcarden.net/dev/faux.html
Thanks for any help with this!!
it's a closure problem. I'm not sure what the exact solution looks like in jQuery, but translated from vanilla js it looks something like this:
Code:
for(i=0;i<11;i++) {
$('#acchdr'+i).click(function(i){
return function(){
runAccordion(i);
}
}); (i)
}
or maybe like this?
Code:
for(i=0;i<11;i++) {
$('#acchdr'+i).click(function(i){
return function(){
runAccordion(i);
}
} (i)
);
}
awesome!, thank you xelawho.
the second one worked (first did not).
that syntax looks strange to me. i don't get that last (i), ...after the bracket?
i ran it without just to see and it failed.
thanks again
it does look weird. I'd explain it, but I'd only be paraphrasing what I read here , which is a pretty good explanation. This guy compares some other techniques for solving the same problem, but seems to prefer the one I posted, too
I strongly suggest you write that as:
Code:
for(i=0;i<11;i++) {
$('#acchdr'+i).click(( function(i){
return function(){
runAccordion(i);
};
}) (i));
}
For the following reasons .
Those extra parentheses make is so much easier to read!
And personally and totally equivalently, I prefer to write it as:
Code:
for (var i = 0; i < 11; i++) {
(function (i) {
// do stuff exactly as normal
)(i);
}
Last edited by Declan1991; 04-27-2012 at 05:47 AM .
Great wit and madness are near allied, and fine a line their bounds divide.
Thread Information
Users Browsing this Thread
There are currently 1 users browsing this thread. (0 members and 1 guests)
Posting Permissions
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
Forum Rules
Bookmarks