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.

Reply via email to