Thank you very much Mr. Crowder. I am so grateful to you. Your suggestions helped me to find the appropriate solution. Problem solved successfully...
Regards, Iqbal On Jul 24, 10:39 pm, "T.J. Crowder" <t...@crowdersoftware.com> wrote: > Hi, > > > But would you figure > > out my code which was drawn in picture, where is the possible problem > > and hints. > > As I said, "...just move the body of your loop into a separate > function and pass that function the value of `i` and the other things > it needs...". There's only one loop in your quoted code. If you take > everything inside the `for` statement's body and move it into a > function, e.g.: > > for (i = 0; i < cmbCount.length; ++i) { > updateRow(cmbCount, i); > } > > // elsewhere... > function updateRow(cmbCount, i) { > // all the other code goes here > } > > ...that should do it, because the code inside `updateRow` will use the > passed-in arguments for `i` and `cmbCount` (I think those are the only > two variables you used from the outer function in that part of the > code, but if I missed some, just add them). > > > Actually the ajax.request could fetch data nicely which was > > examined by alert(); But I could not update the text fields according > > to the index value. > > Right, because only the part updating the array uses the counter `i`. > It's the same as `index` in my example. > > HTH, > -- > T.J. Crowder > Independent Software Consultant > tj / crowder software / comwww.crowdersoftware.com > > On Jul 24, 5:15 pm, ALO <iqbal....@gmail.com> wrote: > > > Hi, > > > Thank you very much for your kind and detail reply. > > > I could understand your all possible suggestions. But would you figure > > out my code which was drawn in picture, where is the possible problem > > and hints. Actually the ajax.request could fetch data nicely which was > > examined by alert(); But I could not update the text fields according > > to the index value. If I don't mentioned the array index [ i ] then > > only first row updated by last value from ajax response and others are > > not. > > > I am not so good in complex callback function. So consider my > > lacking. :) > > > Again looking for your specific suggestive hints. > > > regards, > > Iqbal > > > On Jul 24, 4:41 pm, "T.J. Crowder" <t...@crowdersoftware.com> wrote: > > > > Hi, > > > > This is a classic problem, which can probably be easily summed up like > > > this: > > > > var index; > > > for (index = 0; index < 5; ++index) { > > > $('button' + index).observe('click', function(event) { > > > // Why does this always say "This is button 5" no matter > > > // which button I click? > > > alert("This is button " + index); > > > }); > > > } > > > > The reason this happens is that the function inside the loop is a > > > closure over the context in which it's created. Via the context it > > > receives a *reference* to the `index` variable, not its value. And so > > > it sees any changes to the value of `index` that may happen. All five > > > functions created all refer to the same variable, and all see the > > > *current* value of that variable when they're called. > > > > There are a couple of ways of fixing this, all of which hinge on > > > making sure that you grab a copy of the *value* of `index` at a point > > > in time rather than a reference to it. To do that, you need to create > > > a new context for the function to close over, which means using > > > another function (since functions create contexts). Here's an example: > > > > var index; > > > for (index = 0; index < 5; ++index) { > > > hookButton(index); > > > } > > > function hookButton(buttonIndex) { > > > $('button' + index).observe('click', function(event) { > > > alert("This is button " + buttonIndex); > > > }); > > > } > > > > There we pass the *value* of `index` into `hookButton` and create the > > > callback within that new context. The callback closes over the > > > `buttonIndex` argument in the context for *that call* to `hookButton`, > > > which we don't change anywhere. > > > > You can use Function#curry to do something similar: > > > > var index; > > > for (index = 0; index < 5; ++index) { > > > $('button' + index).observe('click', (function(buttonIndex, > > > event) { > > > alert("This is button " + buttonIndex); > > > }).curry(index)); > > > } > > > > Function#curry creates a new function on the fly that, when called, > > > will call the original function passing in the arguments you gave > > > #curry as the first few arguments to the function. Of course, with > > > this approach we end up creating several temporary functions, whereas > > > the first approach only creates one function (and potentially not a > > > temporary one). > > > > For your specific situation, I think the first approach is easiest to > > > apply -- just move the body of your loop into a separate function and > > > pass that function the value of `i` and the other things it needs. It > > > also leads to more modular code. :-) > > > > HTH, > > > -- > > > T.J. Crowder > > > Independent Software Consultant > > > tj / crowder software / comwww.crowdersoftware.com > > > > On Jul 24, 6:31 am, Iqbal Hossain <iqbal....@gmail.com> wrote: > > > > > Dear concern, > > > > > It is quite difficult for me to describe my problem in written. So I > > > > attached a picture which can express clearly my problem regarding > > > > element > > > > array update with ajax.request. > > > > > Looking for your kind solution. > > > > > regards, > > > > Iqbal > > > > > problem.jpg > > > > 362KViewDownload -- 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.